pymvsim_comms.cpp
Go to the documentation of this file.
1 #include <pybind11/pybind11.h>
2 
3 #include <algorithm>
4 #include <functional>
5 #include <map>
6 #include <memory>
7 #include <stdexcept>
8 #include <string>
9 
10 typedef std::function<pybind11::module&(std::string const&)> ModuleGetter;
11 
12 void bind_std_exception(std::function<pybind11::module&(std::string const& namespace_)>& M);
13 void bind_std_stdexcept(std::function<pybind11::module&(std::string const& namespace_)>& M);
14 void bind_mvsim_Comms_common(std::function<pybind11::module&(std::string const& namespace_)>& M);
15 void bind_mvsim_Comms_Client(std::function<pybind11::module&(std::string const& namespace_)>& M);
16 
17 PYBIND11_MODULE(pymvsim_comms, root_module)
18 {
19  root_module.doc() = "pymvsim_comms module";
20 
21  std::map<std::string, pybind11::module> modules;
22  ModuleGetter M = [&](std::string const& namespace_) -> pybind11::module&
23  {
24  auto it = modules.find(namespace_);
25  if (it == modules.end())
26  throw std::runtime_error(
27  "Attempt to access pybind11::module for namespace " + namespace_ +
28  " before it was created!!!");
29  return it->second;
30  };
31 
32  modules[""] = root_module;
33 
34  static std::vector<std::string> const reserved_python_words{
35  "nonlocal",
36  "global",
37  };
38 
39  auto mangle_namespace_name(
40  [](std::string const& ns) -> std::string
41  {
42  if (std::find(reserved_python_words.begin(), reserved_python_words.end(), ns) ==
43  reserved_python_words.end())
44  return ns;
45  else
46  return ns + '_';
47  });
48 
49  std::vector<std::pair<std::string, std::string>> sub_modules{
50  {"", "mvsim"},
51  {"", "std"},
52  };
53  for (auto& p : sub_modules)
54  modules[p.first.size() ? p.first + "::" + p.second : p.second] =
55  modules[p.first].def_submodule(
56  mangle_namespace_name(p.second).c_str(),
57  ("Bindings for " + p.first + "::" + p.second + " namespace").c_str());
58 
59  // pybind11::class_<std::shared_ptr<void>>(M(""), "_encapsulated_data_");
60 
65 }
PYBIND11_MODULE
PYBIND11_MODULE(pymvsim_comms, root_module)
Definition: pymvsim_comms.cpp:17
bind_std_stdexcept
void bind_std_stdexcept(std::function< pybind11::module &(std::string const &namespace_)> &M)
Definition: stdexcept.cpp:48
bind_std_exception
void bind_std_exception(std::function< pybind11::module &(std::string const &namespace_)> &M)
Definition: exception.cpp:46
ModuleGetter
std::function< pybind11::module &(std::string const &)> ModuleGetter
Definition: pymvsim_comms.cpp:10
bind_mvsim_Comms_Client
void bind_mvsim_Comms_Client(std::function< pybind11::module &(std::string const &namespace_)> &M)
Definition: python/generated-sources-pybind/mvsim/Comms/Client.cpp:21
bind_mvsim_Comms_common
void bind_mvsim_Comms_common(std::function< pybind11::module &(std::string const &namespace_)> &M)
Definition: python/generated-sources-pybind/mvsim/Comms/common.cpp:47


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08