22 *
33 * This file is part of pyosmium. (https://osmcode.org/pyosmium/)
44 *
5- * Copyright (C) 2024 Sarah Hoffmann <[email protected] > and others. 5+ * Copyright (C) 2025 Sarah Hoffmann <[email protected] > and others. 66 * For a full list of authors see the git log.
77 */
88#include < pybind11/pybind11.h>
1414#include < osmium/io/header.hpp>
1515#include < osmium/memory/buffer.hpp>
1616#include < osmium/builder/osm_object_builder.hpp>
17+ #include < osmium/thread/pool.hpp>
1718
1819#include " cast.h"
1920#include " osm_base_objects.h"
2021#include " base_handler.h"
22+ #include " io.h"
2123
2224#include < filesystem>
2325
@@ -30,20 +32,10 @@ class SimpleWriter : public pyosmium::BaseHandler
3032 enum { BUFFER_WRAP = 4096 };
3133
3234public:
33- SimpleWriter (const char * filename, size_t bufsz, osmium::io::Header const *header,
34- bool overwrite, const std::string &filetype)
35- : writer(osmium::io::File(filename, filetype),
36- header ? *header : osmium::io::Header(),
37- overwrite ? osmium::io::overwrite::allow : osmium::io::overwrite::no),
38- buffer (bufsz < 2 * BUFFER_WRAP ? 2 * BUFFER_WRAP : bufsz,
39- osmium::memory::Buffer::auto_grow::yes),
40- buffer_size(buffer.capacity()) // same rounding to BUFFER_WRAP
41- {}
42-
43- SimpleWriter (osmium::io::File file, size_t bufsz, osmium::io::Header const *header,
44- bool overwrite)
45- : writer(file, header ? *header : osmium::io::Header(),
46- overwrite ? osmium::io::overwrite::allow : osmium::io::overwrite::no),
35+ SimpleWriter (osmium::io::File file, unsigned long bufsz,
36+ osmium::io::Header const *header, bool overwrite,
37+ osmium::thread::Pool *pool)
38+ : writer(file, header, overwrite, pool),
4739 buffer (bufsz < 2 * BUFFER_WRAP ? 2 * BUFFER_WRAP : bufsz,
4840 osmium::memory::Buffer::auto_grow::yes),
4941 buffer_size(buffer.capacity()) // same rounding to BUFFER_WRAP
@@ -154,8 +146,8 @@ class SimpleWriter : public pyosmium::BaseHandler
154146 void close ()
155147 {
156148 if (buffer) {
157- writer (std::move (buffer));
158- writer.close ();
149+ (* writer. get ()) (std::move (buffer));
150+ writer.get ()-> close ();
159151 buffer = osmium::memory::Buffer ();
160152 }
161153 }
@@ -335,11 +327,11 @@ class SimpleWriter : public pyosmium::BaseHandler
335327 osmium::memory::Buffer new_buffer (buffer_size, osmium::memory::Buffer::auto_grow::yes);
336328 using std::swap;
337329 swap (buffer, new_buffer);
338- writer (std::move (new_buffer));
330+ (* writer. get ()) (std::move (new_buffer));
339331 }
340332 }
341333
342- osmium::io::Writer writer;
334+ pyosmium::PyWriter writer;
343335 osmium::memory::Buffer buffer;
344336 size_t buffer_size;
345337};
@@ -351,22 +343,38 @@ namespace pyosmium {
351343void init_simple_writer (pybind11::module &m)
352344{
353345 py::class_<SimpleWriter, BaseHandler>(m, " SimpleWriter" )
354- .def (py::init<const char *, unsigned long , osmium::io::Header const *, bool , const std::string&>(),
346+ .def (py::init<>([] (std::string file, unsigned long bufsz,
347+ osmium::io::Header const *header, bool overwrite,
348+ osmium::thread::Pool *pool) {
349+ return new SimpleWriter (osmium::io::File (std::move (file)), bufsz,
350+ header, overwrite, pool);
351+ }),
352+ py::keep_alive<1 , 6 >(),
355353 py::arg (" filename" ), py::arg (" bufsz" ) = 4096 *1024 ,
356354 py::arg (" header" ) = nullptr ,
357355 py::arg (" overwrite" ) = false ,
358- py::arg (" filetype" ) = " " )
356+ py::arg (" thread_pool" ) = nullptr
357+ )
359358 .def (py::init<>([] (std::filesystem::path const &file, unsigned long bufsz,
360- osmium::io::Header const *header, bool overwrite) {
361- return new SimpleWriter (file.string ().c_str (), bufsz, header, overwrite, " " );
359+ osmium::io::Header const *header, bool overwrite,
360+ osmium::thread::Pool *pool) {
361+ return new SimpleWriter (osmium::io::File (file.string ()), bufsz,
362+ header, overwrite, pool);
362363 }),
364+ py::keep_alive<1 , 6 >(),
363365 py::arg (" filename" ), py::arg (" bufsz" ) = 4096 *1024 ,
364366 py::arg (" header" ) = nullptr ,
365- py::arg (" overwrite" ) = false )
366- .def (py::init<osmium::io::File, unsigned long , osmium::io::Header const *, bool >(),
367+ py::arg (" overwrite" ) = false ,
368+ py::arg (" thread_pool" ) = nullptr
369+ )
370+ .def (py::init<osmium::io::File, unsigned long , osmium::io::Header const *,
371+ bool , osmium::thread::Pool *>(),
372+ py::keep_alive<1 , 6 >(),
367373 py::arg (" filename" ), py::arg (" bufsz" ) = 4096 *1024 ,
368374 py::arg (" header" ) = nullptr ,
369- py::arg (" overwrite" ) = false )
375+ py::arg (" overwrite" ) = false ,
376+ py::arg (" thread_pool" ) = nullptr
377+ )
370378 .def (" add_node" , &SimpleWriter::add_node, py::arg (" node" ))
371379 .def (" add_way" , &SimpleWriter::add_way, py::arg (" way" ))
372380 .def (" add_relation" , &SimpleWriter::add_relation, py::arg (" relation" ))
0 commit comments