2727namespace py = pybind11;
2828namespace kd = keyvi::dictionary;
2929
30+ template <typename Compiler>
31+ inline void py_compile (Compiler *c, std::function<void (const size_t a, const size_t b)> progress_callback) {
32+ if (progress_callback == nullptr ) {
33+ c->Compile ();
34+ return ;
35+ }
36+ auto progress_compiler_callback = [](size_t a, size_t b, void *user_data) {
37+ auto py_callback = *reinterpret_cast <std::function<void (const size_t , const size_t )> *>(user_data);
38+ py_callback (a, b);
39+ };
40+ void *user_data = reinterpret_cast <void *>(&progress_callback);
41+ c->Compile (progress_compiler_callback, user_data);
42+ }
43+
3044void init_keyvi_dictionary_compilers (const py::module_ &module ) {
3145#define CREATE_COMPILER (compiler, name ) \
3246 py::class_<compiler>(module , name) \
@@ -35,24 +49,24 @@ void init_keyvi_dictionary_compilers(const py::module_ &module) {
3549 .def (" __enter__" , [](compiler &c) { return &c; }) \
3650 .def (" __exit__" , [](compiler &c, void *exc_type, void *exc_value, void *traceback) { c.Compile (); }) \
3751 .def (" __setitem__" , &compiler::Add) \
38- .def (" add" , &compiler::Add) \
52+ .def (" add" , &compiler::Add) /* DEPRECATED */ \
53+ .def (" Add" , &compiler::Add) \
3954 .def ( \
4055 " compile" , \
4156 [](compiler &c, std::function<void (const size_t a, const size_t b)> progress_callback) { \
42- if (progress_callback == nullptr ) { \
43- c.Compile (); \
44- return ; \
45- } \
46- auto progress_compiler_callback = [](size_t a, size_t b, void *user_data) { \
47- auto py_callback = *reinterpret_cast <std::function<void (const size_t , const size_t )> *>(user_data); \
48- py_callback (a, b); \
49- }; \
50- void *user_data = reinterpret_cast <void *>(&progress_callback); \
51- c.Compile (progress_compiler_callback, user_data); \
57+ py_compile (&c, progress_callback); \
58+ }, \
59+ py::arg (" progress_callback" ) = \
60+ static_cast <std::function<void (const size_t a, const size_t b)> *>(nullptr )) /* DEPRECATED */ \
61+ .def ( \
62+ " Compile" , \
63+ [](compiler &c, std::function<void (const size_t a, const size_t b)> progress_callback) { \
64+ py_compile (&c, progress_callback); \
5265 }, \
5366 py::arg (" progress_callback" ) = static_cast <std::function<void (const size_t a, const size_t b)> *>(nullptr )) \
5467 .def (" set_manifest" , &compiler::SetManifest) \
55- .def (" write_to_file" , &compiler::WriteToFile, py::call_guard<py::gil_scoped_release>());
68+ .def (" write_to_file" , &compiler::WriteToFile, py::call_guard<py::gil_scoped_release>()) /* DEPRECATED */ \
69+ .def (" WriteToFile" , &compiler::WriteToFile, py::call_guard<py::gil_scoped_release>());
5670#define CREATE_SK_COMPILER (compiler, name ) \
5771 py::class_<compiler>(module , name) \
5872 .def (py::init<const std::vector<std::string> &>()) \
@@ -64,18 +78,7 @@ void init_keyvi_dictionary_compilers(const py::module_ &module) {
6478 .def ( \
6579 " compile" , \
6680 [](compiler &c, std::function<void (const size_t a, const size_t b)> progress_callback) { \
67- pybind11::gil_scoped_release release_gil; \
68- if (progress_callback == nullptr ) { \
69- c.Compile (); \
70- return ; \
71- } \
72- auto progress_compiler_callback = [](size_t a, size_t b, void *user_data) { \
73- auto py_callback = *reinterpret_cast <std::function<void (const size_t , const size_t )> *>(user_data); \
74- pybind11::gil_scoped_acquire acquire_gil; \
75- py_callback (a, b); \
76- }; \
77- void *user_data = reinterpret_cast <void *>(&progress_callback); \
78- c.Compile (progress_compiler_callback, user_data); \
81+ py_compile (&c, progress_callback); \
7982 }, \
8083 py::arg (" progress_callback" ) = static_cast <std::function<void (const size_t a, const size_t b)> *>(nullptr )) \
8184 .def (" set_manifest" , &compiler::SetManifest) \
0 commit comments