mirror of https://github.com/pybind/pybind11
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.7 KiB
76 lines
2.7 KiB
// Copyright (c) 2024 The pybind Community. |
|
|
|
// In production situations it is totally fine to build with |
|
// C++ Exception Handling enabled. However, here we want to ensure that |
|
// C++ Exception Handling is not required. |
|
#if defined(_MSC_VER) || defined(__EMSCRIPTEN__) |
|
// Too much trouble making the required cmake changes (see PR #5375). |
|
#else |
|
# ifdef __cpp_exceptions |
|
// https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations#__cpp_exceptions |
|
# error This test is meant to be built with C++ Exception Handling disabled, but __cpp_exceptions is defined. |
|
# endif |
|
# ifdef __EXCEPTIONS |
|
// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html |
|
# error This test is meant to be built with C++ Exception Handling disabled, but __EXCEPTIONS is defined. |
|
# endif |
|
#endif |
|
|
|
// THIS MUST STAY AT THE TOP! |
|
#include <pybind11/conduit/pybind11_conduit_v1.h> // VERY light-weight dependency. |
|
|
|
#include "test_cpp_conduit_traveler_types.h" |
|
|
|
#include <Python.h> |
|
|
|
namespace { |
|
|
|
extern "C" PyObject *wrapGetLuggage(PyObject * /*self*/, PyObject *traveler) { |
|
const auto *cpp_traveler = pybind11_conduit_v1::get_type_pointer_ephemeral< |
|
pybind11_tests::test_cpp_conduit::Traveler>(traveler); |
|
if (cpp_traveler == nullptr) { |
|
return nullptr; |
|
} |
|
return PyUnicode_FromString(cpp_traveler->luggage.c_str()); |
|
} |
|
|
|
extern "C" PyObject *wrapGetPoints(PyObject * /*self*/, PyObject *premium_traveler) { |
|
const auto *cpp_premium_traveler = pybind11_conduit_v1::get_type_pointer_ephemeral< |
|
pybind11_tests::test_cpp_conduit::PremiumTraveler>(premium_traveler); |
|
if (cpp_premium_traveler == nullptr) { |
|
return nullptr; |
|
} |
|
return PyLong_FromLong(static_cast<long>(cpp_premium_traveler->points)); |
|
} |
|
|
|
PyMethodDef ThisMethodDef[] = {{"GetLuggage", wrapGetLuggage, METH_O, nullptr}, |
|
{"GetPoints", wrapGetPoints, METH_O, nullptr}, |
|
{nullptr, nullptr, 0, nullptr}}; |
|
|
|
struct PyModuleDef ThisModuleDef = { |
|
PyModuleDef_HEAD_INIT, // m_base |
|
"exo_planet_c_api", // m_name |
|
nullptr, // m_doc |
|
-1, // m_size |
|
ThisMethodDef, // m_methods |
|
nullptr, // m_slots |
|
nullptr, // m_traverse |
|
nullptr, // m_clear |
|
nullptr // m_free |
|
}; |
|
|
|
} // namespace |
|
|
|
#if defined(WIN32) || defined(_WIN32) |
|
# define EXO_PLANET_C_API_EXPORT __declspec(dllexport) |
|
#else |
|
# define EXO_PLANET_C_API_EXPORT __attribute__((visibility("default"))) |
|
#endif |
|
|
|
extern "C" EXO_PLANET_C_API_EXPORT PyObject *PyInit_exo_planet_c_api() { |
|
PyObject *m = PyModule_Create(&ThisModuleDef); |
|
if (m == nullptr) { |
|
return nullptr; |
|
} |
|
return m; |
|
}
|
|
|