X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=py%2Fannotations.cpp;h=14180899c6e8ad1a2d6f29534843c425db021f2a;hb=9c704ecd2ba1a01f0b82d0f1ea6d9d3e3011fff7;hp=4c0c53cca80a34ebd88019a079d8c25be5952b8c;hpb=c417e847eccd0af3bf9dfed0bc252115bbbf3d83;p=mussa.git diff --git a/py/annotations.cpp b/py/annotations.cpp index 4c0c53c..1418089 100644 --- a/py/annotations.cpp +++ b/py/annotations.cpp @@ -8,24 +8,44 @@ using namespace boost::python; #include "alg/annotations.hpp" - #include "stl_container_adapter.hpp" +#include + +typedef std::pair pair_string; + +struct pair_string_to_tuple +{ + static PyObject * convert(pair_string const &p) { + PyObject *key = PyString_FromString(p.first.c_str()); + PyObject *value = PyString_FromString(p.second.c_str()); + PyObject *tuple = PyTuple_New(2); + if (key == 0 or value == 0 or tuple == 0) + throw std::runtime_error("Allocation Error"); + + PyTuple_SetItem(tuple, 0, key); + PyTuple_SetItem(tuple, 1, value); + return tuple; + } +}; + void export_annotations() { + to_python_converter(); - class_("annotations", init()) + class_("Annotations", init()) .add_property("name", &Annotations::name, &Annotations::setName) .def("__contains__", &map_item::in) .def("__delitem__", &map_item::del) .def("__getitem__", &map_item::get, return_value_policy()) .def("__setitem__", &map_item::set) + .def("__iter__", iterator()) .def("__len__", &Annotations::size) .def("keys", &map_item::keys) .def("values", &map_item::values) .def("items", &map_item::items) - ; + ; - //register_ptr_to_python< AnnotationsRef >(); + register_ptr_to_python< AnnotationsRef >(); }