[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.
|