lsup_rdf_mod.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /** @file lsup_rdf_mod.c
  2. *
  3. * @brief LSUP_RDF package.
  4. *
  5. * This "package" module includes all RDF modules in a monolithic compiled
  6. * object, in order to resolve internal symbol dependencies. Individual modules
  7. * are extracted and exposed by the package __init__.py .
  8. */
  9. #define PY_SSIZE_T_CLEAN
  10. #include <Python.h>
  11. #include "term_obj.h"
  12. #include "triple_obj.h"
  13. #include "graph_obj.h"
  14. static PyModuleDef lsup_rdf_pkg = {
  15. PyModuleDef_HEAD_INIT,
  16. .m_name = "lsup_rdf",
  17. .m_doc = "Lakesuperior RDF package.",
  18. .m_size = -1,
  19. };
  20. PyMODINIT_FUNC
  21. PyInit__lsup_rdf (void)
  22. { return PyModule_Create (&lsup_rdf_pkg); }
  23. PyModuleDef term_mod = {
  24. PyModuleDef_HEAD_INIT,
  25. .m_name = "term",
  26. .m_doc = "RDF term module.",
  27. .m_size = -1,
  28. };
  29. PyMODINIT_FUNC
  30. PyInit_term()
  31. {
  32. if (PyType_Ready (&TermType) < 0) return NULL;
  33. PyObject *m = PyModule_Create(&term_mod);
  34. if (m == NULL) return NULL;
  35. #define ENTRY(a, b) \
  36. if (PyModule_AddIntConstant (m, "TERM_" #a, b) < 0) return NULL;
  37. TTYPE_TBL
  38. #undef ENTRY
  39. Py_INCREF(&TermType);
  40. if (PyModule_AddObject(m, "Term", (PyObject *) &TermType) < 0) {
  41. Py_DECREF(&TermType);
  42. Py_DECREF(m);
  43. return NULL;
  44. }
  45. return m;
  46. }
  47. PyModuleDef triple_mod = {
  48. PyModuleDef_HEAD_INIT,
  49. .m_name = "triple",
  50. .m_doc = "RDF triple module.",
  51. .m_size = -1,
  52. };
  53. PyMODINIT_FUNC
  54. PyInit_triple()
  55. {
  56. if (PyType_Ready (&TripleType) < 0) return NULL;
  57. PyObject *m = PyModule_Create(&triple_mod);
  58. if (m == NULL) return NULL;
  59. Py_INCREF(&TripleType);
  60. if (PyModule_AddObject(m, "Triple", (PyObject *) &TripleType) < 0) {
  61. Py_DECREF(&TripleType);
  62. Py_DECREF(m);
  63. return NULL;
  64. }
  65. return m;
  66. }
  67. static PyModuleDef graph_mod = {
  68. PyModuleDef_HEAD_INIT,
  69. .m_name = "graph",
  70. .m_doc = "RDF graph module.",
  71. .m_size = -1,
  72. };
  73. PyMODINIT_FUNC
  74. PyInit_graph()
  75. {
  76. if (PyType_Ready (&GraphType) < 0) return NULL;
  77. PyObject *m = PyModule_Create(&graph_mod);
  78. if (m == NULL) return NULL;
  79. #define ENTRY(a, b) \
  80. if (PyModule_AddIntConstant (m, "STORE_" #a, b) < 0) return NULL;
  81. BACKEND_TBL
  82. #undef ENTRY
  83. Py_INCREF(&GraphType);
  84. if (PyModule_AddObject(m, "Graph", (PyObject *) &GraphType) < 0) {
  85. Py_DECREF(&GraphType);
  86. Py_DECREF(m);
  87. return NULL;
  88. }
  89. return m;
  90. }