summaryrefslogtreecommitdiff
path: root/src/py_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/py_utils.cc')
-rw-r--r--src/py_utils.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/py_utils.cc b/src/py_utils.cc
index 0f82d683..4dfe8d7e 100644
--- a/src/py_utils.cc
+++ b/src/py_utils.cc
@@ -9,6 +9,40 @@ namespace ledger {
using namespace boost::python;
+struct bool_to_python
+{
+ static PyObject * convert(const bool truth)
+ {
+ if (truth)
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
+ }
+};
+
+struct bool_from_python
+{
+ static void* convertible(PyObject* obj_ptr)
+ {
+ if (!PyBool_Check(obj_ptr)) return 0;
+ return obj_ptr;
+ }
+
+ static void construct(PyObject* obj_ptr,
+ converter::rvalue_from_python_stage1_data* data)
+ {
+ void* storage = ((converter::rvalue_from_python_storage<bool>*) data)->storage.bytes;
+ if (obj_ptr == Py_True)
+ new (storage) bool(true);
+ else
+ new (storage) bool(false);
+ data->convertible = storage;
+ }
+};
+
+typedef register_python_conversion<bool, bool_to_python, bool_from_python>
+ bool_python_conversion;
+
struct string_to_python
{
static PyObject* convert(const string& str)
@@ -40,6 +74,7 @@ typedef register_python_conversion<string, string_to_python, string_from_python>
void export_utils()
{
+ bool_python_conversion();
string_python_conversion();
}