1 #ifndef OSMIUM_IO_WRITER_HPP
2 #define OSMIUM_IO_WRITER_HPP
45 #include <osmium/io/detail/output_format.hpp>
46 #include <osmium/io/detail/queue_util.hpp>
47 #include <osmium/io/detail/read_write.hpp>
48 #include <osmium/io/detail/write_thread.hpp>
91 std::unique_ptr<osmium::io::detail::OutputFormat>
m_output;
108 static void write_thread(detail::future_string_queue_type& output_queue,
109 std::unique_ptr<osmium::io::Compressor>&& compressor,
110 std::promise<bool>&& write_promise) {
112 std::move(compressor),
113 std::move(write_promise)};
118 if (buffer && buffer.committed() > 0) {
119 m_output->write_buffer(std::move(buffer));
125 if (m_buffer && m_buffer.
committed() > 0) {
129 swap(m_buffer, buffer);
131 m_output->write_buffer(std::move(buffer));
135 template <
typename TFunction,
typename... TArgs>
138 throw io_error(
"Can not write to writer when in status 'closed' or 'error'");
142 func(std::forward<TArgs>(args)...);
145 detail::add_to_queue(m_output_queue, std::current_exception());
146 detail::add_end_of_data_to_queue(m_output_queue);
166 options.
sync = value;
194 template <
typename... TArgs>
196 m_file(file.check()),
197 m_output_queue(20,
"raw_output"),
198 m_output(
osmium::io::
detail::OutputFormatFactory::instance().create_output(m_file, m_output_queue)),
200 m_buffer_size(default_buffer_size),
207 (void)std::initializer_list<int>{
211 std::unique_ptr<osmium::io::Compressor> compressor =
213 osmium::io::detail::open_for_writing(m_file.
filename(), options.allow_overwrite),
216 std::promise<bool> write_promise;
217 m_write_future = write_promise.get_future();
221 m_output->write_header(options.header);
225 template <
typename... TArgs>
226 explicit Writer(
const std::string& filename, TArgs&&... args) :
230 template <
typename... TArgs>
231 explicit Writer(
const char* filename, TArgs&&... args) :
261 m_buffer_size = size;
327 m_output->write_end();
329 detail::add_end_of_data_to_queue(m_output_queue);
333 if (m_write_future.valid()) {
334 m_write_future.get();
344 #endif // OSMIUM_IO_WRITER_HPP
fsync sync
Definition: writer.hpp:154
~Writer() noexcept
Definition: writer.hpp:241
void ensure_cleanup(TFunction func, TArgs &&...args)
Definition: writer.hpp:136
Definition: writer.hpp:151
static CompressionFactory & instance()
Definition: compression.hpp:151
void do_write(osmium::memory::Buffer &&buffer)
Definition: writer.hpp:117
void do_flush()
Definition: writer.hpp:123
Definition: reader_iterator.hpp:39
void swap(Buffer &lhs, Buffer &rhs)
Definition: buffer.hpp:721
osmium::thread::thread_handler m_thread
Definition: writer.hpp:99
osmium::io::Header header
Definition: writer.hpp:152
osmium::memory::Buffer m_buffer
Definition: writer.hpp:93
std::unique_ptr< osmium::io::detail::OutputFormat > m_output
Definition: writer.hpp:91
enum osmium::io::Writer::status m_status
void set_buffer_size(size_t size) noexcept
Definition: writer.hpp:260
static void write_thread(detail::future_string_queue_type &output_queue, std::unique_ptr< osmium::io::Compressor > &&compressor, std::promise< bool > &&write_promise)
Definition: writer.hpp:108
void operator()(osmium::memory::Buffer &&buffer)
Definition: writer.hpp:285
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
status
Definition: writer.hpp:101
size_t buffer_size() const noexcept
Definition: writer.hpp:252
Writer(const std::string &filename, TArgs &&...args)
Definition: writer.hpp:226
fsync
Definition: writer_options.hpp:51
static constexpr size_t default_buffer_size
Definition: writer.hpp:85
static void set_option(options_type &options, fsync value)
Definition: writer.hpp:165
void push_back(const osmium::memory::Item &item)
Definition: buffer.hpp:488
size_t m_buffer_size
Definition: writer.hpp:95
void close()
Definition: writer.hpp:323
void flush()
Definition: writer.hpp:271
osmium::io::File m_file
Definition: writer.hpp:87
std::unique_ptr< osmium::io::Compressor > create_compressor(osmium::io::file_compression compression, TArgs &&...args)
Definition: compression.hpp:171
size_t committed() const noexcept
Definition: buffer.hpp:241
Definition: buffer.hpp:97
Definition: buffer.hpp:58
const char * buffer() const noexcept
Definition: file.hpp:158
static void set_option(options_type &options, overwrite value)
Definition: writer.hpp:161
Definition: writer.hpp:83
std::future< bool > m_write_future
Definition: writer.hpp:97
void check_for_exception(std::future< T > &future)
Definition: util.hpp:53
Writer(const osmium::io::File &file, TArgs &&...args)
Definition: writer.hpp:195
overwrite allow_overwrite
Definition: writer.hpp:153
static void set_option(options_type &options, const osmium::io::Header &header)
Definition: writer.hpp:157
detail::future_string_queue_type m_output_queue
Definition: writer.hpp:89
file_compression compression() const noexcept
Definition: file.hpp:291
File & filename(const std::string &filename)
Definition: file.hpp:309
Writer(const char *filename, TArgs &&...args)
Definition: writer.hpp:231
void operator()(const osmium::memory::Item &item)
Definition: writer.hpp:299
overwrite
Definition: writer_options.hpp:43
Writer & operator=(const Writer &)=delete