[pygccxml-commit] SF.net SVN: pygccxml: [913] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-02-18 18:54:29
|
Revision: 913 http://svn.sourceforge.net/pygccxml/?rev=913&view=rev Author: roman_yakovenko Date: 2007-02-18 10:54:27 -0800 (Sun, 18 Feb 2007) Log Message: ----------- adding transfer ownership transformation Modified Paths: -------------- pyplusplus_dev/pyplusplus/function_transformers/__init__.py pyplusplus_dev/pyplusplus/function_transformers/transformers.py pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp pyplusplus_dev/unittests/function_transformations_tester.py pyplusplus_dev/unittests/fundamental_tester_base.py Modified: pyplusplus_dev/pyplusplus/function_transformers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/__init__.py 2007-02-17 19:25:02 UTC (rev 912) +++ pyplusplus_dev/pyplusplus/function_transformers/__init__.py 2007-02-18 18:54:27 UTC (rev 913) @@ -54,3 +54,8 @@ def creator( function ): return transformers.input_c_buffer_t( function, *args, **keywd ) return creator + +def transfer_ownership( *args, **keywd ): + def creator( function ): + return transformers.transfer_ownership_t( function, *args, **keywd ) + return creator Modified: pyplusplus_dev/pyplusplus/function_transformers/transformers.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/transformers.py 2007-02-17 19:25:02 UTC (rev 912) +++ pyplusplus_dev/pyplusplus/function_transformers/transformers.py 2007-02-18 18:54:27 UTC (rev 913) @@ -495,3 +495,38 @@ self.__configure_v_mem_fun_override( controller.override_controller ) self.__configure_v_mem_fun_default( controller.default_controller ) + +class transfer_ownership_t(type_modifier_t): + """see http://boost.org/libs/python/doc/v2/faq.html#ownership + """ + def __init__(self, function, arg_ref): + """Constructor.""" + transformer.transformer_t.__init__( self, function ) + self.arg = self.get_argument( arg_ref ) + self.arg_index = self.function.arguments.index( self.arg ) + if not declarations.is_pointer( self.arg.type ): + raise ValueError( '%s\nin order to use "transfer ownership" transformation, argument %s type must be a pointer (got %s).' ) \ + % ( function, self.arg_ref.name, arg.type) + + def __str__(self): + return "transfer_ownership(%s)" % self.arg.name + + def __configure_sealed( self, controller ): + w_arg = controller.find_wrapper_arg( self.arg.name ) + naked_type = declarations.remove_pointer( self.arg.type ) + naked_type = declarations.remove_declarated( naked_type ) + w_arg.type = declarations.dummy_type_t( 'std::auto_ptr< %s >' % naked_type.decl_string ) + controller.modify_arg_expression(self.arg_index, w_arg.name + '.release()' ) + + def __configure_v_mem_fun_default( self, controller ): + self.__configure_sealed( controller ) + + def configure_mem_fun( self, controller ): + self.__configure_sealed( controller ) + + def configure_free_fun(self, controller ): + self.__configure_sealed( controller ) + + def configure_virtual_mem_fun( self, controller ): + raise NotImplementedError() + Modified: pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2007-02-17 19:25:02 UTC (rev 912) +++ pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2007-02-18 18:54:27 UTC (rev 913) @@ -231,6 +231,20 @@ }; +struct transfer_ownership_tester_t{ + struct resources_t{ + resources_t(){ + std::cout << "created"; + } + ~resources_t(){ + std::cout << "destroyed"; + } + }; + void tester(resources_t* r){ + delete r; + } +}; + } #endif//__function_transformations_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev/unittests/function_transformations_tester.py 2007-02-17 19:25:02 UTC (rev 912) +++ pyplusplus_dev/unittests/function_transformations_tester.py 2007-02-18 18:54:27 UTC (rev 913) @@ -85,6 +85,12 @@ write_s = cls.mem_fun( 'write_s' ) write_s.add_transformation( ft.input_c_buffer( 'buffer', 'size' ) ) + resource = mb.class_( 'resources_t' ) + resource.held_type = 'std::auto_ptr< %s >' % resource.decl_string + transfer_ownership_tester = mb.class_( 'transfer_ownership_tester_t' ) + tester = transfer_ownership_tester.mem_fun( 'tester' ) + tester.add_transformation( ft.transfer_ownership( 0 ) ) + def run_tests(self, module): """Run the actual unit tests. """ @@ -238,6 +244,10 @@ dummy = 11 self.failUnless( 'hello world' == tmp.write( list( hw ), dummy ) ) self.failUnless( 'hello world' == tmp.write_s( dummy, tuple( list( hw ) ) ) ) + + tmp = module.transfer_ownership_tester_t() + resource = tmp.resources_t(); + tmp.tester( resource ) def create_suite(): suite = unittest.TestSuite() Modified: pyplusplus_dev/unittests/fundamental_tester_base.py =================================================================== --- pyplusplus_dev/unittests/fundamental_tester_base.py 2007-02-17 19:25:02 UTC (rev 912) +++ pyplusplus_dev/unittests/fundamental_tester_base.py 2007-02-18 18:54:27 UTC (rev 913) @@ -65,11 +65,12 @@ def _create_extension_source_file(self): global LICENSE - xml_file = os.path.split( self.__to_be_exported_header )[1] - xml_file = os.path.join( autoconfig.build_dir, xml_file + '.xml' ) - xml_cached_fc = parser.create_cached_source_fc( self.__to_be_exported_header, xml_file ) + #xml_file = os.path.split( self.__to_be_exported_header )[1] + #xml_file = os.path.join( autoconfig.build_dir, xml_file + '.xml' ) + #xml_cached_fc = parser.create_cached_source_fc( self.__to_be_exported_header, xml_file ) - mb = module_builder.module_builder_t( [xml_cached_fc] + #mb = module_builder.module_builder_t( [xml_cached_fc] + mb = module_builder.module_builder_t( [self.__to_be_exported_header] , gccxml_path=autoconfig.gccxml.executable , include_paths=[autoconfig.boost.include] , undefine_symbols=['__MINGW32__'] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |