[pygccxml-commit] SF.net SVN: pygccxml: [727] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-16 14:00:27
|
Revision: 727 http://svn.sourceforge.net/pygccxml/?rev=727&view=rev Author: roman_yakovenko Date: 2006-11-16 06:00:26 -0800 (Thu, 16 Nov 2006) Log Message: ----------- adding documentation that describes opaque functionality, A class that marked as "opaque" will not be exposed Modified Paths: -------------- pyplusplus_dev/docs/documentation/functions/call_policies.rest pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/unittests/call_policies_tester.py Modified: pyplusplus_dev/docs/documentation/functions/call_policies.rest =================================================================== --- pyplusplus_dev/docs/documentation/functions/call_policies.rest 2006-11-15 14:46:17 UTC (rev 726) +++ pyplusplus_dev/docs/documentation/functions/call_policies.rest 2006-11-16 14:00:26 UTC (rev 727) @@ -90,6 +90,12 @@ * return type is ``void*`` * return type is ``const void*`` + + * return type is ``T*`` and ``T`` is a user defined opaque type + + ``class_t`` and ``class_declaration_t`` classes have ``opaque`` property. + You have to set it to ``True``, if you want `Py++`_ to create this call + policy automaticly for all functions, that use ``T*`` as return type. * ``copy_const_reference`` @@ -133,16 +139,44 @@ Special case ------------ +Before you read this paragraph consider to read `Boost.Python`_ `return_opaque_pointer documentation`_. + ``return_value_policy( return_opaque_pointer )`` is a special policy for `Boost.Python`_. In this case, it requieres from you to define specialization for the ``boost::python::type_id`` function on the type pointed to by returned pointer. `Py++`_ will generate the required code. -For more information about the call policy please refer to `Boost.Python`_ -`documentation`_. -.. _`documentation` : http://boost.org/libs/python/doc/v2/return_opaque_pointer.html +Actually you should define ``boost::python::type_id`` specialization also in case +a function takes the opaque type as an argument. `Py++`_ can do it for you, all +you need is to say to mark a declaration as opaque. +Example: + +.. code-block:: C++ + + struct identity_impl_t{}; + typedef identity_impl_t* identity; + + struct world_t{ + + world_t( identity id ); + + identity get_id() const; + + ... + }; + +`Py++`_ code: + +.. code-block:: Python + + mb = module_builder_t(...) + mb.class_( 'identity_impl_t' ).opaque = True + + +.. _`return_opaque_pointer documentation` : http://boost.org/libs/python/doc/v2/return_opaque_pointer.html + -------------------------- Py++ defined call policies -------------------------- @@ -177,9 +211,26 @@ , bpl::return_value_policy< pyplusplus::call_policies::return_pointee_value<> >() ); } -`Py++`_ code is pretty simple and similar to what you already know: +The `Py++`_ code is not that different from what you already know: +.. code-block:: Python + from pyplusplus import module_builder + from pyplusplus.module_builder import call_policies + + mb = module_builder.module_builder_t( ... ) + mb.free_function( return_type='float *' ).call_policies \ + = call_policies.return_value_policy( call_policies.return_pointee_value ) + +Python code: + +.. code-block:: Python + + import my_module + + assert 0.5 == my_module.get_value() + assert None is my_module.get_null_value() + .. _`ResultConverterGenerator` : http://boost.org/libs/python/doc/v2/ResultConverter.html#ResultConverterGenerator-concept .. _`Py++` : ./../pyplusplus.html Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-11-15 14:46:17 UTC (rev 726) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-11-16 14:00:26 UTC (rev 727) @@ -118,7 +118,8 @@ return self._opaque def _set_opaque( self, value ): - self._opaque = value + self._opaque = value + self.ignore = value #don't expose opaque type opaque = property( _get_opaque, _set_opaque , doc="If True, Py++ will treat return types and arguments T* as opaque types." \ Modified: pyplusplus_dev/unittests/call_policies_tester.py =================================================================== --- pyplusplus_dev/unittests/call_policies_tester.py 2006-11-15 14:46:17 UTC (rev 726) +++ pyplusplus_dev/unittests/call_policies_tester.py 2006-11-16 14:00:26 UTC (rev 727) @@ -22,9 +22,7 @@ mb.calldef( 'return_second_arg' ).call_policies = call_policies.return_arg( 2 ) mb.calldef( 'return_self' ).call_policies = call_policies.return_self() - mb.class_( 'impl_details_t' ).exclude() - mb.calldef( 'get_impl_details' ).call_policies \ - = call_policies.return_value_policy( call_policies.return_opaque_pointer ) + mb.class_( 'impl_details_t' ).opaque = True mb.calldef( 'get_opaque' ).call_policies \ = call_policies.return_value_policy( call_policies.return_opaque_pointer ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |