[Jahshaka-cvs] openlibraries/src/openpluginlib/py/pcos key.cpp, 1.4, 1.5 property.cpp, 1.15, 1.16 p
Status: Beta
Brought to you by:
jahshaka
From: tim <tim...@us...> - 2006-10-25 08:50:35
|
Update of /cvsroot/openlibraries/openlibraries/src/openpluginlib/py/pcos In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv4093/src/openpluginlib/py/pcos Modified Files: key.cpp property.cpp property_container.cpp Log Message: pcos: - fix for odd behaviour of property_container in python - allow keys in a property_container to be iterated Index: property_container.cpp =================================================================== RCS file: /cvsroot/openlibraries/openlibraries/src/openpluginlib/py/pcos/property_container.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- property_container.cpp 13 Sep 2006 13:55:24 -0000 1.3 +++ property_container.cpp 25 Oct 2006 08:50:27 -0000 1.4 @@ -18,6 +18,27 @@ namespace olib { namespace openpluginlib { namespace detail { +class key_vector_wrapper +{ +public: + key_vector_wrapper( const pcos::key_vector& kv ) + : m_kv( kv ) + {} + + pcos::key_vector::const_iterator begin() const + { + return m_kv.begin(); + } + + pcos::key_vector::const_iterator end() const + { + return m_kv.end(); + } + +private: + const pcos::key_vector& m_kv; +}; + class property_container_wrapper : public pcos::property_container { public: @@ -30,20 +51,26 @@ { return getProperty( k ); } + + key_vector_wrapper getKeys() const + { + return key_vector_wrapper( pcos::property_container::getKeys() ); + } }; void py_pcos_property_container() { - py::class_< pcos::property_container, py::bases< pcos::subject > >( "__property_container", py::no_init ) - .def( "getKeys", &pcos::property_container::getKeys ) - .def( "append", &pcos::property_container::append ) - .def( "remove", &pcos::property_container::remove ); - - py::class_< property_container_wrapper, py::bases< pcos::property_container > >( "property_container" ) - .def( "getProperty", &property_container_wrapper::getPropertyWithString, py::return_value_policy< py::return_by_value >() ) - .def( "getProperty", &property_container_wrapper::getPropertyWithKey, py::return_value_policy< py::return_by_value >() ); + py::class_< property_container_wrapper, py::bases< pcos::subject > >( "property_container" ) + .def( "getProperty", &property_container_wrapper::getPropertyWithString ) + .def( "getProperty", &property_container_wrapper::getPropertyWithKey ) + .def( "getKeys", &property_container_wrapper::getKeys ) + .def( "append", &property_container_wrapper::append ) + .def( "remove", &property_container_wrapper::remove ); py::implicitly_convertible< property_container_wrapper, pcos::property_container >(); + + py::class_< key_vector_wrapper >( "key_vector", py::init< pcos::key_vector >() ) + .def( "__iter__", py::range( &key_vector_wrapper::begin, &key_vector_wrapper::end ) ); } } } } Index: property.cpp =================================================================== RCS file: /cvsroot/openlibraries/openlibraries/src/openpluginlib/py/pcos/property.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- property.cpp 21 Sep 2006 15:41:36 -0000 1.15 +++ property.cpp 25 Oct 2006 08:50:27 -0000 1.16 @@ -42,7 +42,7 @@ template < typename T > bool isA() const { - return pcos::property::isA<T>( ); + return pcos::property::isA<T>( ); } }; Index: key.cpp =================================================================== RCS file: /cvsroot/openlibraries/openlibraries/src/openpluginlib/py/pcos/key.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- key.cpp 13 Sep 2006 13:55:24 -0000 1.4 +++ key.cpp 25 Oct 2006 08:50:27 -0000 1.5 @@ -10,6 +10,9 @@ #include <openpluginlib/py/python.hpp> #include <openpluginlib/py/py.hpp> +#include <string> +#include <sstream> + namespace pcos = olib::openpluginlib::pcos; namespace py = boost::python; @@ -20,10 +23,17 @@ return pcos::key::fromString( ks ); } +std::string getKeyAsString( const pcos::key& k ) +{ + std::ostringstream os; + os << k; + return os.str(); +} void py_pcos_key( ) { py::class_< pcos::key >( "key", py::no_init ) + .def( "__str__", getKeyAsString ) .def( py::self < py::self ) .def( py::self == py::self ) .def( py::self != py::self ); |