pygccxml-commit Mailing List for C++ Python language bindings (Page 64)
Brought to you by:
mbaas,
roman_yakovenko
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(190) |
Apr
(166) |
May
(170) |
Jun
(75) |
Jul
(105) |
Aug
(131) |
Sep
(99) |
Oct
(84) |
Nov
(67) |
Dec
(54) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(66) |
Feb
(49) |
Mar
(25) |
Apr
(62) |
May
(21) |
Jun
(34) |
Jul
(9) |
Aug
(21) |
Sep
(5) |
Oct
|
Nov
(63) |
Dec
(34) |
2008 |
Jan
(10) |
Feb
(42) |
Mar
(26) |
Apr
(25) |
May
(6) |
Jun
(40) |
Jul
(18) |
Aug
(29) |
Sep
(6) |
Oct
(32) |
Nov
(14) |
Dec
(56) |
2009 |
Jan
(127) |
Feb
(52) |
Mar
(2) |
Apr
(10) |
May
(29) |
Jun
(3) |
Jul
|
Aug
(16) |
Sep
(4) |
Oct
(11) |
Nov
(8) |
Dec
(14) |
2010 |
Jan
(31) |
Feb
(1) |
Mar
(7) |
Apr
(9) |
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(8) |
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <rom...@us...> - 2006-06-29 12:00:47
|
Revision: 266 Author: roman_yakovenko Date: 2006-06-29 05:00:38 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=266&view=rev Log Message: ----------- fixing pointer to pointer bug Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-06-29 11:25:57 UTC (rev 265) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-06-29 12:00:38 UTC (rev 266) @@ -96,7 +96,8 @@ and not declarations.is_const( arg_type ) \ and not declarations.is_enum( arg_base_type ): params.append( 'boost::ref(%s)' % self.argument_name( index ) ) - elif declarations.is_pointer( arg_type ) \ + elif declarations.is_pointer( arg_type ) \ + and not( declarations.is_pointer( arg_type.base ) \ and not declarations.is_fundamental( arg_type.base ) \ and not declarations.is_enum( arg_base_type ): params.append( 'boost::python::ptr(%s)' % self.argument_name( index ) ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2006-06-29 11:25:57 UTC (rev 265) +++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2006-06-29 12:00:38 UTC (rev 266) @@ -97,7 +97,8 @@ def _exportable_impl_derived( self ): return '' - def _exportable_impl( self ): + def _exportable_impl( self ): + #TODO: functions that takes as argument pointer to pointer to smth, could not be exported #see http://www.boost.org/libs/python/doc/v2/faq.html#funcptr if len( self.arguments ) > calldef_t.BOOST_PYTHON_MAX_ARITY: msg = "Function '%s' with more then 10 arguments( %d ). " This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-29 11:26:03
|
Revision: 265 Author: roman_yakovenko Date: 2006-06-29 04:25:57 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=265&view=rev Log Message: ----------- fixing small bug Modified Paths: -------------- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 11:16:59 UTC (rev 264) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 11:25:57 UTC (rev 265) @@ -204,7 +204,9 @@ """ header_name = self.create_value_traits_header_name( value_traits.declaration ) file_path = os.path.join( self.directory_path, header_name ) - self.write_file( file_path, self.create_header( header_name, value_traits.create() ) ) + self.write_file( file_path + , self.create_header( header_name.replace( '.', '_' ) + , value_traits.create() ) ) value_traits.create = lambda: '' def split_creators( self, creators, pattern, function_name, registrator_pos ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-29 11:17:12
|
Revision: 264 Author: roman_yakovenko Date: 2006-06-29 04:16:59 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=264&view=rev Log Message: ----------- fixing bugs Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/file_writers/multiple_files.py pyplusplus_dev/pyplusplus/module_creator/types_database.py Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-29 09:09:33 UTC (rev 263) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-29 11:16:59 UTC (rev 264) @@ -55,9 +55,7 @@ result[-1] = result[-1] + ' ' + scope_var_name result[-1] = result[-1] + '( %s );' % self.class_var_name - for x in creators: - if x is used_init: - continue + for x in self.creators: if not x.works_on_instance: result.append( x.create() ) else: Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 09:09:33 UTC (rev 263) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 11:16:59 UTC (rev 264) @@ -202,9 +202,9 @@ Write the value_traits class to header file, that will be included from files, that uses indexing suite 2 """ - code = value_traits.create() - self.create_header( self.create_value_traits_header_name( value_traits.declaration ) - , code ) + header_name = self.create_value_traits_header_name( value_traits.declaration ) + file_path = os.path.join( self.directory_path, header_name ) + self.write_file( file_path, self.create_header( header_name, value_traits.create() ) ) value_traits.create = lambda: '' def split_creators( self, creators, pattern, function_name, registrator_pos ): @@ -280,7 +280,8 @@ value_traits_classes = filter( lambda x: isinstance(x, code_creators.value_traits_t ) , self.extmodule.creators ) - + map( self.split_value_traits, value_traits_classes ) + # Obtain a list of all class creators... class_creators = filter( lambda x: isinstance(x, ( code_creators.class_t, code_creators.class_declaration_t ) ) , self.extmodule.body.creators ) Modified: pyplusplus_dev/pyplusplus/module_creator/types_database.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-29 09:09:33 UTC (rev 263) +++ pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-29 11:16:59 UTC (rev 264) @@ -56,11 +56,17 @@ type = declarations.remove_reference( type ) type = declarations.remove_cv( type ) type = declarations.remove_declarated( type ) - - if not declarations.is_class( type ) and not declarations.is_class_declaration( type ): + + class_traits = declarations.class_traits + class_declaration_traits = declarations.class_declaration_traits + if not class_traits.is_my_case( type ) and not class_declaration_traits.is_my_case( type ): return False - - container_cls = type + + if class_traits.is_my_case( type ): + container_cls = class_traits.get_declaration( type ) + else: + container_cls = class_declaration_traits.get_declaration( type ) + if None is container_cls.indexing_suite: return False This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-29 09:09:47
|
Revision: 263 Author: roman_yakovenko Date: 2006-06-29 02:09:33 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=263&view=rev Log Message: ----------- updating multiple_files.py writer to support new indexing suite Modified Paths: -------------- pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py pyplusplus_dev/examples/pyboost_dev/dev/date_time/generate_code.py pyplusplus_dev/pyplusplus/file_writers/multiple_files.py Modified: pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py 2006-06-29 06:18:44 UTC (rev 262) +++ pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py 2006-06-29 09:09:33 UTC (rev 263) @@ -30,7 +30,8 @@ , gccxml_path=random_settings.gccxml.executable , include_paths=[random_settings.boost.include] , define_symbols=random_settings.defined_symbols - , undefine_symbols=random_settings.undefined_symbols) + , undefine_symbols=random_settings.undefined_symbols + , indexing_suite_version=2) self.generators = [ "ecuyer1988" , "hellekalek1995" , "kreutzer1986" Modified: pyplusplus_dev/examples/pyboost_dev/dev/date_time/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/date_time/generate_code.py 2006-06-29 06:18:44 UTC (rev 262) +++ pyplusplus_dev/examples/pyboost_dev/dev/date_time/generate_code.py 2006-06-29 09:09:33 UTC (rev 263) @@ -42,7 +42,8 @@ , include_paths=[date_time_settings.boost.include] , define_symbols=date_time_settings.defined_symbols , undefine_symbols=date_time_settings.undefined_symbols - , optimize_queries=False) + , optimize_queries=False + , indexing_suite_version=2) if sys.platform == 'win32': linux_name = "time_duration<boost::posix_time::time_duration, boost::date_time::time_resolution_traits<boost::date_time::time_resolution_traits_adapted64_impl, (boost::date_time::time_resolutions)5, (long long)1000000, 6, int> >" win_name = "time_duration<boost::posix_time::time_duration, boost::date_time::time_resolution_traits<boost::date_time::time_resolution_traits_adapted64_impl, (boost::date_time::time_resolutions)5, (long long)1000000, 6, long> >" Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 06:18:44 UTC (rev 262) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-29 09:09:33 UTC (rev 263) @@ -6,6 +6,8 @@ import os import writer from sets import Set as set +from pygccxml import declarations +from pyplusplus import decl_wrappers from pyplusplus import code_creators from pyplusplus import _logging_ @@ -49,8 +51,11 @@ doc="""The name of the output directory. @type: str """ ) - - def create_header( self, file_name, function_name ): + + def create_function_code( self, function_name ): + return "void %s();" % function_name + + def create_header( self, file_name, code ): """Return the content of a header file. @param file_name: A string that uniquely identifies the file name @@ -64,17 +69,30 @@ "#ifndef __%(file_name)s_hpp__pyplusplus_wrapper__" , "#define __%(file_name)s_hpp__pyplusplus_wrapper__" , '' - , "void %(function_name)s();" + , "%(code)s;" , '' , "#endif//__%(file_name)s_hpp__pyplusplus_wrapper__" ]) content = '' if self.extmodule.license: content = self.extmodule.license.create() + os.linesep - content = content + tmpl % { 'file_name' : file_name - , 'function_name' : function_name } + content = content + tmpl % { 'file_name' : file_name, 'code' : code } return content + def find_out_value_traits_header( self, code_creator ): + if not isinstance( code_creator, ( code_creators.class_t, code_creators.class_declaration_t ) ): + return None + if None is code_creator.declaration.indexing_suite: + return None + if not isinstance( code_creator.declaration.indexing_suite, decl_wrappers.indexing_suite2_t ): + return None + value_type = code_creator.declaration.indexing_suite.value_type() + class_traits = declarations.class_traits + if not class_traits.is_my_case( value_type ): + return None + value_class = class_traits.get_declaration( value_type ) + return self.create_value_traits_header_name( value_class ) + def create_source( self, file_name, function_name, creators ): """Return the content of a cpp file. @@ -99,7 +117,11 @@ , self.extmodule.creators ) includes = map( lambda include_creator: include_creator.create() , include_creators ) - answer.append( os.linesep.join(includes) ) + for creator in creators: + value_traits_header = self.find_out_value_traits_header( creator ) + if value_traits_header: + includes.append( '#include "%s"' % value_traits_header ) + answer.append( os.linesep.join(includes) ) # Write all 'global' namespace_alias_t and namespace_using_t creators first... affect_creators = filter( lambda x: isinstance( x, code_creators.namespace_alias_t ) @@ -136,13 +158,14 @@ # Write the .h file... header_name = file_path + self.HEADER_EXT self.write_file( header_name - , self.create_header( class_creator.alias, function_name ) ) + , self.create_header( class_creator.alias + , self.create_function_code( function_name ) ) ) # Write the .cpp file... self.write_file( file_path + self.SOURCE_EXT , self.create_source( class_creator.alias , function_name , [class_creator] )) - if class_creator.wrapper: + if isinstance( class_creator, code_creators.class_t ) and class_creator.wrapper: # The wrapper has already been written above, so replace the create() # method with a new 'method' that just returns an empty string because # this method is later called again for the main source file. @@ -171,6 +194,19 @@ _logging_.logger.error( msg ) raise + def create_value_traits_header_name( self, value_class ): + return "_" + value_class.alias + "__value_traits" + self.HEADER_EXT + + def split_value_traits( self, value_traits ): + """ + Write the value_traits class to header file, that will be included + from files, that uses indexing suite 2 + """ + code = value_traits.create() + self.create_header( self.create_value_traits_header_name( value_traits.declaration ) + , code ) + value_traits.create = lambda: '' + def split_creators( self, creators, pattern, function_name, registrator_pos ): """Write non-class creators into a particular .h/.cpp file. @@ -189,7 +225,7 @@ file_path = os.path.join( self.directory_path, file_pattern ) header_name = file_path + self.HEADER_EXT self.write_file( header_name - , self.create_header( file_pattern, function_name ) ) + , self.create_header( file_pattern, self.create_function_code( function_name ) ) ) self.write_file( file_path + self.SOURCE_EXT , self.create_source( file_pattern , function_name @@ -242,8 +278,11 @@ self.extmodule.do_include_dirs_optimization() + value_traits_classes = filter( lambda x: isinstance(x, code_creators.value_traits_t ) + , self.extmodule.creators ) + # Obtain a list of all class creators... - class_creators = filter( lambda x: isinstance(x, code_creators.class_t ) + class_creators = filter( lambda x: isinstance(x, ( code_creators.class_t, code_creators.class_declaration_t ) ) , self.extmodule.body.creators ) # ...and write a .h/.cpp file for each class map( self.split_class, class_creators ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-29 06:19:13
|
Revision: 262 Author: roman_yakovenko Date: 2006-06-28 23:18:44 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=262&view=rev Log Message: ----------- fixing code creators interface - parent should not be passed in __init__ Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/code_creators/code_creator.py pyplusplus_dev/pyplusplus/code_creators/compound.py pyplusplus_dev/pyplusplus/code_creators/custom.py pyplusplus_dev/pyplusplus/code_creators/declaration_based.py pyplusplus_dev/pyplusplus/code_creators/enum.py pyplusplus_dev/pyplusplus/code_creators/global_variable.py pyplusplus_dev/pyplusplus/code_creators/include.py pyplusplus_dev/pyplusplus/code_creators/include_directories.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/code_creators/instruction.py pyplusplus_dev/pyplusplus/code_creators/license.py pyplusplus_dev/pyplusplus/code_creators/member_variable.py pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/pyplusplus/code_creators/module_body.py pyplusplus_dev/pyplusplus/code_creators/namespace.py pyplusplus_dev/pyplusplus/code_creators/scoped.py pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2006-06-29 06:18:44 UTC (rev 262) @@ -14,8 +14,8 @@ """ This class creates code that register static sized array """ - def __init__( self, array_type, parent=None ): - code_creator.code_creator_t.__init__(self, parent=parent) + def __init__( self, array_type ): + code_creator.code_creator_t.__init__( self ) self._array_type = array_type self._call_policies = self._guess_call_policies() self.works_on_instance = False Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-06-29 06:18:44 UTC (rev 262) @@ -24,10 +24,8 @@ #private - override class calldef_t( declaration_based.declaration_based_t): - def __init__(self, function, wrapper=None, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=function - , parent=parent ) + def __init__(self, function, wrapper=None ): + declaration_based.declaration_based_t.__init__( self, declaration=function ) self._wrapper = wrapper def _get_wrapper( self ): @@ -63,10 +61,8 @@ return ''.join( result ) class calldef_wrapper_t( declaration_based.declaration_based_t): - def __init__(self, function, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=function - , parent=parent ) + def __init__(self, function ): + declaration_based.declaration_based_t.__init__( self, declaration=function ) def argument_name( self, index ): arg = self.declaration.arguments[ index ] @@ -125,8 +121,8 @@ return ' throw( ' + self.PARAM_SEPARATOR.join( exceptions ) + ' )' class free_function_t( calldef_t ): - def __init__( self, function, parent=None ): - calldef_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_t.__init__( self, function=function ) def _create_impl(self): param_sep = self.param_sep() @@ -154,8 +150,8 @@ return ''.join( result ) class mem_fun_t( calldef_t ): - def __init__( self, function, parent=None ): - calldef_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_t.__init__( self, function=function ) def _create_impl(self): param_sep = self.param_sep() @@ -184,8 +180,8 @@ class mem_fun_pv_t( calldef_t ): - def __init__( self, function, wrapper, parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -216,8 +212,8 @@ return ''.join( result ) class mem_fun_pv_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_wrapper_t.__init__( self, function=function ) def create_declaration(self): template = 'virtual %(return_type)s %(name)s( %(args)s )%(constness)s%(throw)s' @@ -260,8 +256,8 @@ return os.linesep.join( answer ) class mem_fun_v_t( calldef_t ): - def __init__( self, function, wrapper=None, parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper=None ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -296,8 +292,8 @@ return ''.join( result ) class mem_fun_v_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_wrapper_t.__init__( self, function=function ) def default_full_name(self): return self.parent.full_name + '::default_' + self.declaration.alias @@ -378,8 +374,8 @@ class mem_fun_protected_t( calldef_t ): - def __init__( self, function, wrapper, parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -407,8 +403,8 @@ return ''.join( result ) class mem_fun_protected_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_wrapper_t.__init__( self, function=function ) def full_name(self): return '::'.join( [self.parent.full_name, self.declaration.name] ) @@ -461,8 +457,8 @@ class mem_fun_protected_s_t( calldef_t ): - def __init__( self, function, wrapper, parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -490,8 +486,8 @@ return ''.join( result ) class mem_fun_protected_s_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function ): + calldef_wrapper_t.__init__( self, function=function ) def full_name(self): return '::'.join( [self.parent.full_name, self.declaration.name] ) @@ -535,8 +531,8 @@ return self.create_function() class mem_fun_protected_v_t( calldef_t ): - def __init__( self, function, wrapper, parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -564,8 +560,8 @@ class mem_fun_protected_v_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function): + calldef_wrapper_t.__init__( self, function=function ) def full_name(self): return self.parent.full_name + '::' + self.declaration.name @@ -623,8 +619,8 @@ return self.create_function() class mem_fun_protected_pv_t( calldef_t ): - def __init__( self, function, wrapper,parent=None ): - calldef_t.__init__( self, function=function, wrapper=wrapper, parent=parent ) + def __init__( self, function, wrapper ): + calldef_t.__init__( self, function=function, wrapper=wrapper ) def _create_impl(self): param_sep = self.param_sep() @@ -652,8 +648,8 @@ return ''.join( result ) class mem_fun_protected_pv_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function): + calldef_wrapper_t.__init__( self, function=function ) def full_name(self): return self.parent.full_name + '::' + self.declaration.name @@ -707,8 +703,8 @@ return os.linesep.join( answer ) class mem_fun_private_v_wrapper_t( calldef_wrapper_t ): - def __init__( self, function, parent=None): - calldef_wrapper_t.__init__( self, function=function, parent=parent ) + def __init__( self, function): + calldef_wrapper_t.__init__( self, function=function ) def full_name(self): return self.parent.full_name + '::' + self.declaration.name @@ -783,8 +779,8 @@ """ Creates boost.python code needed to expose constructor. """ - def __init__(self, constructor, wrapper=None, parent=None ): - calldef_t.__init__( self, function=constructor, wrapper=wrapper, parent=parent ) + def __init__(self, constructor, wrapper=None ): + calldef_t.__init__( self, function=constructor, wrapper=wrapper ) def _create_arg_code( self, arg ): temp = arg.type @@ -833,10 +829,8 @@ """ Creates boost.python code that expose member function as static function. """ - def __init__(self, function, function_code_creator=None, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=function - , parent=parent ) + def __init__(self, function, function_code_creator=None ): + declaration_based.declaration_based_t.__init__( self, declaration=function ) self._function_code_creator = function_code_creator @@ -854,8 +848,8 @@ Creates C++ code that builds wrapper arround exposed constructor. """ - def __init__( self, constructor, parent=None ): - calldef_wrapper_t.__init__( self, function=constructor, parent=parent ) + def __init__( self, constructor ): + calldef_wrapper_t.__init__( self, function=constructor ) def _create_declaration(self): result = [] @@ -900,10 +894,8 @@ """ Creates wrapper class constructor from wrapped class instance. """ - def __init__( self, class_inst, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=class_inst - , parent=parent ) + def __init__( self, class_inst ): + declaration_based.declaration_based_t.__init__( self, declaration=class_inst ) def _create_declaration(self): result = [] @@ -938,10 +930,8 @@ """ Creates wrapper for compiler generated null constructor. """ - def __init__( self, class_inst, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=class_inst - , parent=parent ) + def __init__( self, class_inst ): + declaration_based.declaration_based_t.__init__( self, declaration=class_inst ) def _create_constructor_call( self ): return algorithm.create_identifier( self, self.parent.declaration.decl_string ) + '()' @@ -969,10 +959,10 @@ SECOND = 'second' BOTH = 'both' - def __init__(self, operator, parent=None ): + def __init__(self, operator ): declaration_based.declaration_based_t.__init__( self , declaration=operator - , parent=parent ) + ) def _call_type_constructor( self, type ): x = declarations.remove_reference( type ) @@ -1038,10 +1028,8 @@ """ Creates boost.python code needed to register type conversions( implicitly_convertible ) """ - def __init__( self, operator, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=operator - , parent=parent ) + def __init__( self, operator ): + declaration_based.declaration_based_t.__init__( self, declaration=operator ) def _create_impl(self): #TODO add comment in case of non const operator @@ -1061,10 +1049,8 @@ operators Pythonic name is given: __int__, __long__, __float__, __str__ """ - def __init__( self, operator, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=operator - , parent=parent ) + def __init__( self, operator ): + declaration_based.declaration_based_t.__init__( self, declaration=operator ) self._call_policies = None def _create_impl(self): @@ -1089,10 +1075,8 @@ This case treat situation when class has public non explicit constuctor from another type. """ - def __init__( self, constructor, parent=None ): - declaration_based.declaration_based_t.__init__( self - , declaration=constructor - , parent=parent ) + def __init__( self, constructor ): + declaration_based.declaration_based_t.__init__( self, declaration=constructor ) def _create_impl(self): implicitly_convertible = algorithm.create_identifier( self, '::boost::python::implicitly_convertible' ) Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-29 06:18:44 UTC (rev 262) @@ -13,10 +13,8 @@ from pygccxml import declarations class class_declaration_t( scoped.scoped_t ): - def __init__(self, class_inst, parent=None ): - scoped.scoped_t.__init__( self - , parent=parent - , declaration=class_inst ) + def __init__(self, class_inst ): + scoped.scoped_t.__init__( self, declaration=class_inst ) self.works_on_instance = False def _generate_class_definition(self): @@ -84,10 +82,8 @@ """ Creates boost.python code that needed to export a class """ - def __init__(self, class_inst, wrapper=None, parent=None ): - scoped.scoped_t.__init__( self - , parent=parent - , declaration=class_inst ) + def __init__(self, class_inst, wrapper=None ): + scoped.scoped_t.__init__( self, declaration=class_inst ) self._wrapper = wrapper self.works_on_instance = False @@ -299,10 +295,8 @@ Creates C++ code that creates wrapper arround some class """ - def __init__(self, declaration, class_creator, parent=None ): - scoped.scoped_t.__init__( self - , parent=parent - , declaration=declaration ) + def __init__(self, declaration, class_creator ): + scoped.scoped_t.__init__( self, declaration=declaration ) self._class_creator = class_creator self._base_wrappers = [] Modified: pyplusplus_dev/pyplusplus/code_creators/code_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2006-06-29 06:18:44 UTC (rev 262) @@ -23,16 +23,14 @@ __INDENTATION = ' ' LINE_LENGTH = 80 PARAM_SEPARATOR = ', ' - def __init__(self, parent=None): + def __init__(self): """Constructor. @param parent: Parent code creator. @type parent: code_creator_t """ object.__init__(self) - if parent: - assert isinstance( parent, code_creator_t ) - self._parent = parent + self._parent = None self._target_configuration = None self._works_on_instance = True Modified: pyplusplus_dev/pyplusplus/code_creators/compound.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/compound.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/compound.py 2006-06-29 06:18:44 UTC (rev 262) @@ -7,13 +7,13 @@ import code_creator class compound_t(code_creator.code_creator_t): - def __init__(self, parent=None): + def __init__(self ): """Constructor. @param parent: Parent code creator. @type parent: L{code_creator_t} """ - code_creator.code_creator_t.__init__( self, parent ) + code_creator.code_creator_t.__init__( self ) self._creators = [] def _get_creators(self): Modified: pyplusplus_dev/pyplusplus/code_creators/custom.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/custom.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/custom.py 2006-06-29 06:18:44 UTC (rev 262) @@ -6,20 +6,20 @@ import code_creator class custom_t(code_creator.code_creator_t): - def __init__(self, parent=None, works_on_instance=True): + def __init__(self, works_on_instance=True): """ Base class for custom code. works_on_instance: If true, the custom code can be applied directly to obj inst. Ex: ObjInst."CustomCode" """ - code_creator.code_creator_t.__init__(self, parent) + code_creator.code_creator_t.__init__(self) self.works_on_instance = works_on_instance def _create_impl(self): raise NotImplementedError() class custom_text_t(custom_t): - def __init__(self, text, parent=None, works_on_instance=True): - custom_t.__init__(self, parent, works_on_instance) + def __init__(self, text, works_on_instance=True): + custom_t.__init__(self, works_on_instance) self._text = text def _get_text(self): Modified: pyplusplus_dev/pyplusplus/code_creators/declaration_based.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2006-06-29 06:18:44 UTC (rev 262) @@ -9,7 +9,7 @@ class declaration_based_t(code_creator.code_creator_t): """Code creator that is based on a declaration. """ - def __init__(self, declaration, parent=None ): + def __init__(self, declaration ): """Constructor. @param declaration: Declaration object @@ -17,7 +17,7 @@ @param parent: Parent code creator. @type parent: code_creator_t """ - code_creator.code_creator_t.__init__(self, parent) + code_creator.code_creator_t.__init__(self) self._decl = declaration def _create_impl(self): Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/enum.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2006-06-29 06:18:44 UTC (rev 262) @@ -11,10 +11,8 @@ """ Creates boost.python code that expose C++ enum """ - def __init__(self, enum, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=enum) + def __init__(self, enum ): + declaration_based.declaration_based_t.__init__( self, declaration=enum) self.works_on_instance = False def _get_value_aliases(self): Modified: pyplusplus_dev/pyplusplus/code_creators/global_variable.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2006-06-29 06:18:44 UTC (rev 262) @@ -17,10 +17,8 @@ Base class for all global variables code creators. Mainly exists to simplify file writers algorithms. """ - def __init__(self, variable, wrapper=None, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable, wrapper=None ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) self._wrapper = wrapper def _get_wrapper( self ): @@ -33,10 +31,8 @@ """ Creates boost.python code that exposes global variable. """ - def __init__(self, variable, parent=None ): - global_variable_base_t.__init__( self - , variable=variable - , parent=parent ) + def __init__(self, variable ): + global_variable_base_t.__init__( self, variable=variable ) def _create_impl(self): assert isinstance( self.declaration, pygccxml.declarations.variable_t ) @@ -53,11 +49,8 @@ """ _PARAM_SEPARATOR = ', ' - def __init__(self, variable, wrapper, parent=None ): - global_variable_base_t.__init__( self - , variable=variable - , wrapper=wrapper - , parent=parent ) + def __init__(self, variable, wrapper ): + global_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) def _create_impl( self ): answer = [] @@ -73,10 +66,8 @@ Creates C++ code that register array class. """ - def __init__(self, variable, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) def _get_wrapper_type( self ): ns_name = code_repository.array_1.namespace Modified: pyplusplus_dev/pyplusplus/code_creators/include.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/include.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/include.py 2006-06-29 06:18:44 UTC (rev 262) @@ -12,8 +12,8 @@ """ Creates C++ code for include directive """ - def __init__( self, header, parent=None ): - code_creator.code_creator_t.__init__(self, parent) + def __init__( self, header ): + code_creator.code_creator_t.__init__(self) self._header = include_directories.include_directories_t.normalize( header ) self._include_dirs_optimization = None #This parameter will be set from module_t.create function Modified: pyplusplus_dev/pyplusplus/code_creators/include_directories.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/include_directories.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/include_directories.py 2006-06-29 06:18:44 UTC (rev 262) @@ -13,8 +13,8 @@ L{include_t} and {precompiled_header_t} code creators use it to generate relative include directives. """ - def __init__(self, parent=None ): - instruction.instruction_t.__init__(self, parent) + def __init__(self): + instruction.instruction_t.__init__(self) self._user_defined = [] self._std = [] Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-29 06:18:44 UTC (rev 262) @@ -11,8 +11,8 @@ from pygccxml import declarations class indexing_suite1_t( declaration_based.declaration_based_t ): - def __init__(self, container, parent=None ): - declaration_based.declaration_based_t.__init__( self, declaration=container, parent=parent ) + def __init__(self, container ): + declaration_based.declaration_based_t.__init__( self, declaration=container ) def _get_configuration( self ): return self.declaration.indexing_suite @@ -47,8 +47,8 @@ class indexing_suite2_t( declaration_based.declaration_based_t ): - def __init__(self, container, parent=None ): - declaration_based.declaration_based_t.__init__( self, declaration=container, parent=parent ) + def __init__(self, container ): + declaration_based.declaration_based_t.__init__( self, declaration=container ) self.__method_mask_var_name = "methods_mask" self.works_on_instance = not self.does_user_disable_methods() @@ -104,15 +104,15 @@ return ''.join( answer ) class value_traits_t( declaration_based.declaration_based_t ): - def __init__( self, value_class, parent=None ): - declaration_based.declaration_based_t.__init__( self, declaration=value_class, parent=parent ) + def __init__( self, value_class ): + declaration_based.declaration_based_t.__init__( self, declaration=value_class ) def generate_value_traits( self ): tmpl = os.linesep.join([ "namespace boost { namespace python { namespace indexing {" , "" , "template<>" - , "struct value_traits<%(value_class)s>{" + , "struct value_traits< %(value_class)s >{" , "" , self.indent( "static bool const equality_comparable = %(has_equal)s;" ) , self.indent( "static bool const less_than_comparable = %(has_lessthan)s;" ) Modified: pyplusplus_dev/pyplusplus/code_creators/instruction.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/instruction.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/instruction.py 2006-06-29 06:18:44 UTC (rev 262) @@ -11,8 +11,8 @@ This class is used as a base class for different instruction for code creators. """ #TODO: add silent option and make it default - def __init__(self, parent, silent=True): - code_creator.code_creator_t.__init__(self, parent) + def __init__(self, silent=True): + code_creator.code_creator_t.__init__(self) self._silent = silent def get_silent(self): Modified: pyplusplus_dev/pyplusplus/code_creators/license.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/license.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/license.py 2006-06-29 06:18:44 UTC (rev 262) @@ -10,8 +10,8 @@ This class allows user to put his license on the top of every generated file. License text will be generated as is. """ - def __init__(self, text, parent=None): - code_creator.code_creator_t.__init__(self, parent) + def __init__(self, text ): + code_creator.code_creator_t.__init__(self) self._text = text def _get_text(self): Modified: pyplusplus_dev/pyplusplus/code_creators/member_variable.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2006-06-29 06:18:44 UTC (rev 262) @@ -16,10 +16,8 @@ simplify file writers algorithms. """ - def __init__(self, variable, wrapper=None, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable, wrapper=None ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) self._wrapper = wrapper def _get_wrapper( self ): @@ -32,8 +30,8 @@ """ Creates boost.python code that exposes member variable. """ - def __init__(self, variable, wrapper=None, parent=None ): - member_variable_base_t.__init__( self, variable=variable, wrapper=wrapper, parent=parent) + def __init__(self, variable, wrapper=None ): + member_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) #> On Wednesday, 19. April 2006 23:05, Ralf W. Grosse-Kunstleve wrote: #> .add_property("p", make_function(&A::get_p, return_value_policy<reference_existing_object>())) @@ -159,10 +157,8 @@ , '' ]) - def __init__(self, variable, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) def _get_getter_full_name(self): return self.parent.full_name + '::' + 'get_' + self.declaration.name @@ -232,11 +228,8 @@ """ Creates boost.python code that exposes bit fields member variables """ - def __init__(self, variable, wrapper, parent=None ): - member_variable_base_t.__init__( self - , variable=variable - , wrapper=wrapper - , parent=parent) + def __init__(self, variable, wrapper ): + member_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) def _create_impl( self ): if self.declaration.type_qualifiers.has_static: @@ -285,10 +278,8 @@ , '' ]) - def __init__(self, variable, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) def _get_getter_full_name(self): return self.parent.full_name + '::' + 'get_' + self.declaration.name @@ -331,11 +322,8 @@ """ Creates boost.python code that exposes array member variable. """ - def __init__(self, variable, wrapper, parent=None ): - member_variable_base_t.__init__( self - , variable=variable - , wrapper=wrapper - , parent=parent ) + def __init__(self, variable, wrapper ): + member_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) def _create_impl( self ): assert isinstance( self.wrapper, array_mv_wrapper_t ) @@ -366,10 +354,8 @@ Creates C++ code that register array class. """ - def __init__(self, variable, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) def _get_wrapper_type( self ): ns_name = code_repository.array_1.namespace @@ -420,11 +406,8 @@ """ Creates C++ code that creates accessor for class member variable, that has type reference. """ - def __init__(self, variable, wrapper, parent=None ): - member_variable_base_t.__init__( self - , variable=variable - , wrapper=wrapper - , parent=parent) + def __init__(self, variable, wrapper ): + member_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) self.param_sep = os.linesep + self.indent( self.PARAM_SEPARATOR, 2 ) self.works_on_instance = False @@ -488,10 +471,8 @@ , '' ]) - def __init__(self, variable, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=variable) + def __init__(self, variable ): + declaration_based.declaration_based_t.__init__( self, declaration=variable) def _get_getter_full_name(self): return self.parent.full_name + '::' + 'get_' + self.declaration.name Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2006-06-29 06:18:44 UTC (rev 262) @@ -21,7 +21,7 @@ def __init__(self): """Constructor. """ - compound.compound_t.__init__(self, None) + compound.compound_t.__init__(self) self.__system_headers = [] def add_system_header( self, header ): @@ -38,7 +38,7 @@ , where=self.creators , recursive=False) if 0 == len( include_dirs ): - include_dirs = include_directories.include_directories_t(parent=self) + include_dirs = include_directories.include_directories_t() if self.license: self.adopt_creator( include_dirs, 1 ) else: Modified: pyplusplus_dev/pyplusplus/code_creators/module_body.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module_body.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/module_body.py 2006-06-29 06:18:44 UTC (rev 262) @@ -7,8 +7,8 @@ import compound class module_body_t(compound.compound_t): - def __init__( self, name, parent=None ): - compound.compound_t.__init__(self, parent) + def __init__( self, name ): + compound.compound_t.__init__(self ) self._name = name def _get_name(self): Modified: pyplusplus_dev/pyplusplus/code_creators/namespace.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/namespace.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/namespace.py 2006-06-29 06:18:44 UTC (rev 262) @@ -6,8 +6,8 @@ import code_creator class namespace_alias_t(code_creator.code_creator_t): - def __init__( self, alias, full_namespace_name, parent=None ): - code_creator.code_creator_t.__init__(self, parent) + def __init__( self, alias, full_namespace_name ): + code_creator.code_creator_t.__init__( self ) self._alias = alias self._full_namespace_name = full_namespace_name @@ -27,8 +27,8 @@ return 'namespace %s = %s;' % ( self.alias, self.full_namespace_name ) class namespace_using_t(code_creator.code_creator_t): - def __init__( self, namespace_name, parent=None ): - code_creator.code_creator_t.__init__(self, parent) + def __init__( self, namespace_name ): + code_creator.code_creator_t.__init__(self ) self._namespace_name = namespace_name def _get_namespace_name( self ): Modified: pyplusplus_dev/pyplusplus/code_creators/scoped.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/scoped.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/scoped.py 2006-06-29 06:18:44 UTC (rev 262) @@ -8,11 +8,9 @@ import declaration_based class scoped_t(declaration_based.declaration_based_t, compound.compound_t): - def __init__( self, declaration, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=declaration) - compound.compound_t.__init__( self, parent ) + def __init__( self, declaration ): + declaration_based.declaration_based_t.__init__( self, declaration=declaration) + compound.compound_t.__init__( self ) def _create_impl(self): #template method pattern should be used. Modified: pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2006-06-29 06:18:44 UTC (rev 262) @@ -37,9 +37,9 @@ Lets boost python know that it can use smart_ptr to hold a an object. See: http://www.boost.org/libs/python/doc/v2/register_ptr_to_python.html """ - def __init__( self, smart_ptr, class_creator, parent=None ): + def __init__( self, smart_ptr, class_creator ): """ smart_ptr: string of ptr type. Ex: 'boost::shared_ptr' """ - declaration_based.declaration_based_t.__init__( self, class_creator.declaration, parent ) + declaration_based.declaration_based_t.__init__( self, class_creator.declaration ) self._smart_ptr = smart_ptr self._class_creator = class_creator self.works_on_instance = False @@ -73,8 +73,8 @@ conversion from source to target. See: http://www.boost.org/libs/python/doc/v2/implicit.html """ - def __init__( self, smart_ptr, source, target, parent=None ): - declaration_based.declaration_based_t.__init__( self, source, parent ) + def __init__( self, smart_ptr, source, target ): + declaration_based.declaration_based_t.__init__( self, source ) self._target = target self._smart_ptr = smart_ptr self.works_on_instance = False Modified: pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2006-06-29 06:18:44 UTC (rev 262) @@ -9,10 +9,8 @@ import declaration_based class unnamed_enum_t( declaration_based.declaration_based_t ): - def __init__(self, unnamed_enum, parent=None ): - declaration_based.declaration_based_t.__init__( self - , parent=parent - , declaration=unnamed_enum) + def __init__(self, unnamed_enum ): + declaration_based.declaration_based_t.__init__( self, declaration=unnamed_enum) self.works_on_instance = False def _get_value_aliases(self): Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 20:16:11 UTC (rev 261) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-29 06:18:44 UTC (rev 262) @@ -371,19 +371,24 @@ #supported container : [ header file, is already used ] + used_headers = set() isuite1 = { - 'vector<' : [ "boost/python/suite/indexing/vector_indexing_suite.hpp", False ] - , 'map<' : [ "boost/python/suite/indexing/map_indexing_suite.hpp", False ] + 'vector<' : "boost/python/suite/indexing/vector_indexing_suite.hpp" + , 'map<' : "boost/python/suite/indexing/map_indexing_suite.hpp" } - #include <boost/python/suite/indexing/vector.hpp> - - container_suite_header_was_used = False - container_suite_header = "boost/python/suite/indexing/container_suite.hpp" isuite2 = { - 'vector<' : [ "boost/python/suite/indexing/vector.hpp", False ] + 'vector<' : "boost/python/suite/indexing/vector.hpp" + , 'deque<' : "boost/python/suite/indexing/deque.hpp" + , 'list<' : "boost/python/suite/indexing/list.hpp" + , 'map<' : "boost/python/suite/indexing/map.hpp" + , 'hash_map<' : "boost/python/suite/indexing/map.hpp" + , 'set<' : "boost/python/suite/indexing/set.hpp" + , 'hash_set<' : "boost/python/suite/indexing/set.hpp" + #TODO: queue, priority, stack, multimap, hash_multimap, multiset, hash_multiset } + container_suite_header = "boost/python/suite/indexing/container_suite.hpp" for cls in self.__types_db.used_containers: container_name = cls.name.split( '<' )[0] + '<' @@ -395,15 +400,10 @@ if not isuite.has_key( container_name ): continue #not supported - if isuite is isuite2 and not container_suite_header_was_used: - container_suite_header_was_used = True - self.__extmodule.add_system_header( container_suite_header ) - self.__extmodule.add_include( container_suite_header ) + if isuite is isuite2: + used_headers.add( container_suite_header ) - if not isuite[ container_name ][1]: - isuite[ container_name ][1] = True - self.__extmodule.add_system_header( isuite[ container_name ][0] ) - self.__extmodule.add_include( header=isuite[ container_name ][0] ) + used_headers.add( isuite[ container_name ] ) cls_creator = create_cls_cc( cls ) value_type = cls.indexing_suite.value_type() @@ -420,7 +420,17 @@ self.__extmodule.adopt_creator( value_type_cc, self.__extmodule.creators.index( self.__module_body ) ) cls_creator.adopt_creator( code_creators.indexing_suite2_t(cls) ) self.__module_body.adopt_creator( cls_creator ) - + + if container_suite_header in used_headers: + #I want this header to be the first one. + used_headers.remove( container_suite_header ) + self.__extmodule.add_system_header( container_suite_header ) + self.__extmodule.add_include( container_suite_header ) + + for header in used_headers: + self.__extmodule.add_system_header( header ) + self.__extmodule.add_include( header ) + def create(self, decl_headers=None): """Create and return the module for the extension. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 20:16:33
|
Revision: 261 Author: roman_yakovenko Date: 2006-06-28 13:16:11 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=261&view=rev Log Message: ----------- indexing suite - value traits Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/type_traits.py pygccxml_dev/unittests/data/core_cache.hpp pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp pyplusplus_dev/unittests/indexing_suites2_tester.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-28 14:32:24 UTC (rev 260) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-28 20:16:11 UTC (rev 261) @@ -105,12 +105,17 @@ from type_traits import is_enum from type_traits import enum_declaration +from type_traits import enum_traits +from type_traits import is_class +from type_traits import class_traits +from type_traits import is_class_declaration +from type_traits import class_declaration_traits + + from type_traits import is_same from type_traits import is_void from type_traits import is_void_pointer -from type_traits import is_class -from type_traits import is_class_declaration from type_traits import is_const from type_traits import base_type from type_traits import is_array Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-28 14:32:24 UTC (rev 260) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-28 20:16:11 UTC (rev 261) @@ -260,35 +260,37 @@ , cpptypes.fundamental_t , (cpptypes.const_t, cpptypes.volatile_t) ) -def is_enum(type): - """returns True if type represents C++ enum type""" - nake_type = remove_alias( type ) - nake_type = remove_cv( nake_type ) +class declaration_xxx_traits: + sequence = [ remove_alias, remove_cv, remove_declarated ] + def __init__( self, declaration_class ): + self.declaration_class = declaration_class + + def apply_sequence( self, type ): + for f in self.sequence: + type = f( type ) + return type - return isinstance( nake_type, cpptypes.declarated_t ) \ - and isinstance( nake_type.declaration, enumeration.enumeration_t ) + def is_my_case( self, type ): + return isinstance( self.apply_sequence( type ), self.declaration_class ) + + def get_declaration( self, type ): + assert self.is_my_case( type ) + return self.apply_sequence( type ) -def enum_declaration(type): - if not is_enum( type ): - raise TypeError( 'Type "%s" is not enumeration' % type.decl_string ) - nake_type = remove_alias( type ) - nake_type = remove_cv( nake_type ) - return remove_declarated( nake_type ) +enum_traits = declaration_xxx_traits( enumeration.enumeration_t ) -def is_class(type): - """returns True if type represents C++ class""" - nake_type = remove_alias( type ) - nake_type = remove_cv( nake_type ) - nake_type = remove_declarated( nake_type ) - return isinstance( nake_type, class_declaration.class_t) +is_enum = enum_traits.is_my_case +#backward computability +enum_declaration = enum_traits.get_declaration -def is_class_declaration(type): - """returns True if type represents C++ class""" - nake_type = remove_alias( type ) - nake_type = remove_cv( nake_type ) - nake_type = remove_declarated( nake_type ) - return isinstance( nake_type, class_declaration.class_declaration_t) +class_traits = declaration_xxx_traits( class_declaration.class_t ) +#backward computability +is_class = class_traits.is_my_case +class_declaration_traits = declaration_xxx_traits( class_declaration.class_declaration_t ) +#backward computability +is_class_declaration = class_declaration_traits.is_my_case + def find_trivial_constructor( type ): """returns reference to trivial constructor or None""" assert isinstance( type, class_declaration.class_t ) Modified: pygccxml_dev/unittests/data/core_cache.hpp =================================================================== --- pygccxml_dev/unittests/data/core_cache.hpp 2006-06-28 14:32:24 UTC (rev 260) +++ pygccxml_dev/unittests/data/core_cache.hpp 2006-06-28 20:16:11 UTC (rev 261) @@ -22,4 +22,4 @@ #endif//__core_cache_hpp__ -//touch//touch \ No newline at end of file +//touch//touch//touch \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-28 20:16:11 UTC (rev 261) @@ -107,3 +107,4 @@ from indexing_suites import indexing_suite1_t from indexing_suites import indexing_suite2_t +from indexing_suites import value_traits_t \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 20:16:11 UTC (rev 261) @@ -103,6 +103,51 @@ answer.append( ';' ) return ''.join( answer ) +class value_traits_t( declaration_based.declaration_based_t ): + def __init__( self, value_class, parent=None ): + declaration_based.declaration_based_t.__init__( self, declaration=value_class, parent=parent ) + def generate_value_traits( self ): + tmpl = os.linesep.join([ + "namespace boost { namespace python { namespace indexing {" + , "" + , "template<>" + , "struct value_traits<%(value_class)s>{" + , "" + , self.indent( "static bool const equality_comparable = %(has_equal)s;" ) + , self.indent( "static bool const less_than_comparable = %(has_lessthan)s;" ) + , "" + , self.indent( "template<typename PythonClass, typename Policy>" ) + , self.indent( "static void visit_container_class(PythonClass &, Policy const &){" ) + , self.indent( "%(visitor_helper_body)s", 2 ) + , self.indent( "}" ) + , "" + , "};" + , "" + , "}/*indexing*/ } /*python*/ } /*boost*/" + ]) + return tmpl % { 'value_class' : self.decl_identifier + , 'has_equal' : str( bool( self.declaration.equality_comparable ) ) .lower() + , 'has_lessthan' : str( bool( self.declaration.less_than_comparable ) ).lower() + , 'visitor_helper_body' : '' } + def generate_value_class_fwd_declaration( self ): + pass # for inner class this code will generate error :-(((( + + def _create_impl( self ): + return self.generate_value_traits() + + + + + + + + + + + + + + Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-28 20:16:11 UTC (rev 261) @@ -89,7 +89,6 @@ from indexing_suite1 import indexing_suite1_t from indexing_suite2 import indexing_suite2_t - class dwfactory_t( declarations.decl_factory_t ): """ declarations factory class Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-28 20:16:11 UTC (rev 261) @@ -16,7 +16,7 @@ self._always_expose_using_scope = False self._indexing_suite = None self._equality_comparable = None - self._lessthan_comparable = None + self._less_than_comparable = None self._isuite_version = 1 def _get_indexing_suite_version( self ): @@ -49,6 +49,7 @@ indexing_suite = property( _get_indexing_suite ) def _get_equality_comparable( self ): + return False if None is self._equality_comparable: self._equality_comparable = declarations.has_public_equal( self ) return self._equality_comparable @@ -58,15 +59,16 @@ equality_comparable = property( _get_equality_comparable, _set_equality_comparable ) - def _get_lessthan_comparable( self ): - if None is self._lessthan_comparable: - self._lessthan_comparable = declarations.has_public_less( self ) - return self._lessthan_comparable + def _get_less_than_comparable( self ): + return False + if None is self._less_than_comparable: + self._less_than_comparable = declarations.has_public_less( self ) + return self._less_than_comparable - def _set_lessthan_comparable( self, value ): - self._lessthan_comparable = value + def _set_less_than_comparable( self, value ): + self._less_than_comparable = value - lessthan_comparable = property( _get_lessthan_comparable, _set_lessthan_comparable ) + less_than_comparable = property( _get_less_than_comparable, _set_less_than_comparable ) #this will only be exported if indexing suite is not None and only when needed Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 20:16:11 UTC (rev 261) @@ -392,7 +392,7 @@ else: isuite = isuite2 - if not isuite1.has_key( container_name ): + if not isuite.has_key( container_name ): continue #not supported if isuite is isuite2 and not container_suite_header_was_used: @@ -401,17 +401,23 @@ self.__extmodule.add_include( container_suite_header ) if not isuite[ container_name ][1]: - isuite1[ container_name ][1] = True + isuite[ container_name ][1] = True self.__extmodule.add_system_header( isuite[ container_name ][0] ) self.__extmodule.add_include( header=isuite[ container_name ][0] ) cls_creator = create_cls_cc( cls ) + value_type = cls.indexing_suite.value_type() if isuite is isuite1: - value_type = cls.indexing_suite.value_type() if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): cls_creator.adopt_creator( create_explanation( cls ) ) cls_creator.adopt_creator( code_creators.indexing_suite1_t(cls) ) else: + class_traits = declarations.class_traits + if class_traits.is_my_case( value_type ): + value_cls = class_traits.get_declaration( value_type ) + if not ( value_cls.equality_comparable and value_cls.less_than_comparable ): + value_type_cc = code_creators.value_traits_t( value_cls ) + self.__extmodule.adopt_creator( value_type_cc, self.__extmodule.creators.index( self.__module_body ) ) cls_creator.adopt_creator( code_creators.indexing_suite2_t(cls) ) self.__module_body.adopt_creator( cls_creator ) Modified: pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp 2006-06-28 20:16:11 UTC (rev 261) @@ -10,34 +10,34 @@ namespace indexing_suites2 { -//~ struct item_t{ - //~ item_t() : value( -1 ){} +struct item_t{ + item_t() : value( -1 ){} - //~ bool operator==(item_t const& item) const { - //~ return value == item.value; - //~ } + bool operator==(item_t const& item) const { + return value == item.value; + } - //~ bool operator!=(item_t const& item) const { - //~ return value != item.value; - //~ } + bool operator!=(item_t const& item) const { + return value != item.value; + } - //~ int value; -//~ }; + int value; +}; -//~ typedef std::vector<item_t> items_t; +typedef std::vector<item_t> items_t; -//~ inline item_t get_value( const std::vector<item_t>& vec, unsigned int index ){ - //~ return vec.at(index); -//~ } +inline item_t get_value( const std::vector<item_t>& vec, unsigned int index ){ + return vec.at(index); +} -//~ inline void set_value( std::vector<item_t>& vec, unsigned int index, item_t value ){ - //~ vec.at(index); - //~ vec[index] = value; -//~ } +inline void set_value( std::vector<item_t>& vec, unsigned int index, item_t value ){ + vec.at(index); + vec[index] = value; +} -typedef std::vector<int> ivector; -ivector empty_ivector(){ return ivector(); } +typedef std::vector<float> fvector; +fvector empty_fvector(){ return fvector(); } } Modified: pyplusplus_dev/unittests/indexing_suites2_tester.py =================================================================== --- pyplusplus_dev/unittests/indexing_suites2_tester.py 2006-06-28 14:32:24 UTC (rev 260) +++ pyplusplus_dev/unittests/indexing_suites2_tester.py 2006-06-28 20:16:11 UTC (rev 261) @@ -31,14 +31,17 @@ #~ return False def customize(self, generator): - ivector = generator.global_ns.typedef( 'ivector' ) - ivector = declarations.remove_declarated( ivector.type ) - ivector.indexing_suite.disable_method( 'extend' ) - ivector.indexing_suite.disable_methods_group( 'reorder' ) - #ivector.indexing_suite.call_policies = module_builder.call_policies.default_call_policies() + fvector = generator.global_ns.typedef( 'fvector' ) + fvector = declarations.remove_declarated( fvector.type ) + fvector.indexing_suite.disable_method( 'extend' ) + fvector.indexing_suite.disable_methods_group( 'reorder' ) + #fvector.indexing_suite.call_policies = module_builder.call_policies.default_call_policies() def run_tests( self, module): - iv = module.ivector() + fv = module.fvector() + self.failUnless( not hasattr( fv, 'extend' ) ) + self.failUnless( not hasattr( fv, 'sort' ) ) + self.failUnless( not hasattr( fv, 'reverse' ) ) #~ items = module.items_t() #~ item = module.item_t() #~ item.value = 1977 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 14:32:55
|
Revision: 260 Author: roman_yakovenko Date: 2006-06-28 07:32:24 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=260&view=rev Log Message: ----------- Adding works_on_instance to base class of all code creators. This small refactoring was a must, in order to add indexing suite 2 functionality. Otherwise, the generated code could not be compiled. Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/code_creators/code_creator.py pyplusplus_dev/pyplusplus/code_creators/custom.py pyplusplus_dev/pyplusplus/code_creators/enum.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/code_creators/member_variable.py pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/fundamental_tester_base.py pyplusplus_dev/unittests/indexing_suites2_tester.py pyplusplus_dev/unittests/test_all.py Modified: pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2006-06-28 14:32:24 UTC (rev 260) @@ -18,6 +18,7 @@ code_creator.code_creator_t.__init__(self, parent=parent) self._array_type = array_type self._call_policies = self._guess_call_policies() + self.works_on_instance = False def _get_array_type( self ): return self._array_type Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-28 14:32:24 UTC (rev 260) @@ -6,14 +6,10 @@ import os import types import scoped -import custom import calldef import algorithm import smart_pointers import declaration_based -import array_1_registrator -import member_variable -import indexing_suites from pygccxml import declarations class class_declaration_t( scoped.scoped_t ): @@ -21,6 +17,7 @@ scoped.scoped_t.__init__( self , parent=parent , declaration=class_inst ) + self.works_on_instance = False def _generate_class_definition(self): class_identifier = algorithm.create_identifier( self, '::boost::python::class_' ) @@ -41,6 +38,12 @@ def _get_class_var_name(self): return self.alias + '_exposer' class_var_name = property( _get_class_var_name ) + + def is_exposed_using_scope(self): + if self.declaration.always_expose_using_scope: + return True + return bool( filter( lambda cc: not cc.works_on_instance, self.creators ) ) + def _generate_code_with_scope(self): result = [] @@ -54,14 +57,13 @@ result[-1] = result[-1] + ' ' + scope_var_name result[-1] = result[-1] + '( %s );' % self.class_var_name - for x in self.creators: - if not ( x is used_init ): - if self._should_creator_be_exported_under_scope( x ): - result.append( x.create() ) - elif isinstance( x, custom.custom_t ) and x.works_on_instance == False: - result.append( '%s;' % x.create() ) - else: - result.append( '%s.%s;' % ( self.class_var_name, x.create() ) ) + for x in creators: + if x is used_init: + continue + if not x.works_on_instance: + result.append( x.create() ) + else: + result.append( '%s.%s;' % ( self.class_var_name, x.create() ) ) code = os.linesep.join( result ) @@ -72,7 +74,7 @@ return os.linesep.join( result ) def _create_impl(self): - if self.declaration.always_expose_using_scope: + if self.is_exposed_using_scope: return self._generate_code_with_scope() else: return self._generate_code_no_scope() @@ -87,6 +89,7 @@ , parent=parent , declaration=class_inst ) self._wrapper = wrapper + self.works_on_instance = False def _get_wrapper( self ): return self._wrapper @@ -239,25 +242,6 @@ result.append( ';' ) return ''.join( result ) - def _should_creator_be_exported_under_scope(self, inst ): - if isinstance( inst, ( indexing_suites.indexing_suite1_t, indexing_suites.indexing_suite2_t ) ): - return False - if isinstance( inst, declaration_based.declaration_based_t ) \ - and isinstance( inst.declaration - , ( declarations.enumeration_t, declarations.class_t ) ): - return True - # If there is a custom text that won't apply as call on instance - if isinstance( inst, custom.custom_t ) and inst.works_on_instance == False: - return True - - if isinstance( inst, array_1_registrator.array_1_registrator_t ): - return True - - if isinstance( inst, member_variable.mem_var_ref_t ): - return True - - return False - def _get_class_var_name(self): return self.alias + '_exposer' class_var_name = property( _get_class_var_name ) @@ -283,13 +267,12 @@ creators = self.creators + self._get_base_operators(base_classes, base_creators) for x in creators: - if not ( x is used_init ): - if self._should_creator_be_exported_under_scope( x ): - result.append( x.create() ) - elif isinstance( x, custom.custom_t ) and x.works_on_instance == False: - result.append( '%s;' % x.create() ) - else: - result.append( '%s.%s;' % ( self.class_var_name, x.create() ) ) + if x is used_init: + continue + if not x.works_on_instance: + result.append( x.create() ) + else: + result.append( '%s.%s;' % ( self.class_var_name, x.create() ) ) code = os.linesep.join( result ) @@ -300,9 +283,9 @@ return os.linesep.join( result ) def is_exposed_using_scope(self): - scoped_exporters = filter( lambda x: self._should_creator_be_exported_under_scope( x ) - , self.creators ) - return bool( self.declaration.always_expose_using_scope or scoped_exporters ) + if self.declaration.always_expose_using_scope: + return True + return bool( filter( lambda cc: not cc.works_on_instance, self.creators ) ) def _create_impl(self): if self.is_exposed_using_scope(): Modified: pyplusplus_dev/pyplusplus/code_creators/code_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2006-06-28 14:32:24 UTC (rev 260) @@ -34,7 +34,15 @@ assert isinstance( parent, code_creator_t ) self._parent = parent self._target_configuration = None + self._works_on_instance = True + + def _get_works_on_instance(self): + return self._works_on_instance + def _set_works_on_instance(self, works_on_instance): + self._works_on_instance = works_on_instance + works_on_instance = property( _get_works_on_instance, _set_works_on_instance ) + def _get_parent( self ): return self._parent def _set_parent( self, new_parent ): Modified: pyplusplus_dev/pyplusplus/code_creators/custom.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/custom.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/custom.py 2006-06-28 14:32:24 UTC (rev 260) @@ -12,13 +12,7 @@ Ex: ObjInst."CustomCode" """ code_creator.code_creator_t.__init__(self, parent) - self._works_on_instance = works_on_instance - - def _get_works_on_instance(self): - return self._works_on_instance - def _set_works_on_instance(self, works_on_instance): - self._works_on_instance = works_on_instance - works_on_instance = property( _get_works_on_instance, _set_works_on_instance ) + self.works_on_instance = works_on_instance def _create_impl(self): raise NotImplementedError() Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/enum.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2006-06-28 14:32:24 UTC (rev 260) @@ -15,6 +15,7 @@ declaration_based.declaration_based_t.__init__( self , parent=parent , declaration=enum) + self.works_on_instance = False def _get_value_aliases(self): return self.declaration.value_aliases Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 14:32:24 UTC (rev 260) @@ -49,11 +49,60 @@ class indexing_suite2_t( declaration_based.declaration_based_t ): def __init__(self, container, parent=None ): declaration_based.declaration_based_t.__init__( self, declaration=container, parent=parent ) + self.__method_mask_var_name = "methods_mask" + self.works_on_instance = not self.does_user_disable_methods() - def _get_configuration( self ): - return self.declaration.indexing_suite - configuration = property( _get_configuration ) - + def does_user_disable_methods( self ): + return bool( self.declaration.indexing_suite.disabled_methods_groups ) \ + or bool( self.declaration.indexing_suite.disable_methods ) + + def generate_algorithm_mask( self ): + indexing = algorithm.create_identifier(self, "::boost::python::indexing" ) + disable = [] + for group in self.declaration.indexing_suite.disabled_methods_groups: + group_id = algorithm.create_identifier(self, "::boost::python::indexing::%s_methods" % group ) + disable.append( group_id ) + for method in self.declaration.indexing_suite.disable_methods: + method_id = algorithm.create_identifier(self, "::boost::python::indexing::method_" + method ) + disable.append( method_id ) + answer = [ 'unsigned long const %s = ' % self.__method_mask_var_name ] + answer.append( algorithm.create_identifier(self, "::boost::python::indexing::all_methods" ) ) + answer.append( ' & ~' ) + if 1 == len ( disable ): + answer.append( disable[0] ) + else: + answer.append( '( ' ) + answer.append( ' | '.join( disable ) ) + answer.append( ' ) ' ) + answer.append( ';' ) + return ''.join( answer ) + def _create_impl( self ): - container_suite = algorithm.create_identifier(self, "::boost::python::indexing::container_suite" ) - return "def( %s< %s >() )" % ( container_suite, self.decl_identifier ) \ No newline at end of file + answer = [] + if self.does_user_disable_methods(): + answer.append( self.generate_algorithm_mask() ) + answer.append( os.linesep ) + if not self.works_on_instance: + answer.append( '%s.def( ' % self.parent.class_var_name) + else: + answer.append( 'def( ' ) + answer.append( algorithm.create_identifier(self, "::boost::python::indexing::container_suite" ) ) + answer.append( '< ' ) + answer.append( self.decl_identifier ) + if self.does_user_disable_methods(): + answer.append( self.PARAM_SEPARATOR ) + answer.append( self.__method_mask_var_name ) + answer.append( ' >' ) + if self.declaration.indexing_suite.call_policies: + answer.append( '::with_policies(%s)' + % self.declaration.indexing_suite.call_policies.create( self ) ) + else: + answer.append( '()' ) + answer.append( ' )' ) + if not self.works_on_instance: + answer.append( ';' ) + return ''.join( answer ) + + + + Modified: pyplusplus_dev/pyplusplus/code_creators/member_variable.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2006-06-28 14:32:24 UTC (rev 260) @@ -426,6 +426,7 @@ , wrapper=wrapper , parent=parent) self.param_sep = os.linesep + self.indent( self.PARAM_SEPARATOR, 2 ) + self.works_on_instance = False def _create_getter( self ): answer = ['def'] Modified: pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2006-06-28 14:32:24 UTC (rev 260) @@ -42,6 +42,7 @@ declaration_based.declaration_based_t.__init__( self, class_creator.declaration, parent ) self._smart_ptr = smart_ptr self._class_creator = class_creator + self.works_on_instance = False def _get_smart_ptr( self ): return self._smart_ptr @@ -76,6 +77,7 @@ declaration_based.declaration_based_t.__init__( self, source, parent ) self._target = target self._smart_ptr = smart_ptr + self.works_on_instance = False def _get_target(self): return self._target Modified: pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2006-06-28 14:32:24 UTC (rev 260) @@ -13,7 +13,8 @@ declaration_based.declaration_based_t.__init__( self , parent=parent , declaration=unnamed_enum) - + self.works_on_instance = False + def _get_value_aliases(self): return self.declaration.value_aliases def _set_value_aliases(self, value_aliases): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 14:32:24 UTC (rev 260) @@ -36,10 +36,10 @@ , 'delitem_slice', 'reverse', 'append', 'insert', 'extend', 'sort' ) METHOD_GROUPS = { - 'slice_methods' : ( 'method_getitem_slice', 'method_setitem_slice', 'method_delitem_slice' ) - , 'search_methods' : ( 'method_index', 'method_contains', 'method_count', 'method_has_key' ) - , 'reorder_methods' : ( 'method_sort', 'method_reverse' ) - , 'insert_methods' : ( 'method_append', 'method_insert', 'method_extend' ) + 'slice' : ( 'method_getitem_slice', 'method_setitem_slice', 'method_delitem_slice' ) + , 'search' : ( 'method_index', 'method_contains', 'method_count', 'method_has_key' ) + , 'reorder' : ( 'method_sort', 'method_reverse' ) + , 'insert' : ( 'method_append', 'method_insert', 'method_extend' ) } def __init__( self, container_class, container_traits ): Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 14:32:24 UTC (rev 260) @@ -358,7 +358,7 @@ def create_explanation(cls): msg = '//WARNING: the next line of code will not compile, because "%s" does not have operator== !' msg = msg % cls.indexing_suite.value_type().decl_string - return code_creators.custom_text_t( msg ) + return code_creators.custom_text_t( msg, False ) def create_cls_cc( cls ): if isinstance( cls, declarations.class_t ): Modified: pyplusplus_dev/unittests/fundamental_tester_base.py =================================================================== --- pyplusplus_dev/unittests/fundamental_tester_base.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/unittests/fundamental_tester_base.py 2006-06-28 14:32:24 UTC (rev 260) @@ -17,7 +17,7 @@ class fundamental_tester_base_t( unittest.TestCase ): SUFFIX_TO_BE_EXPORTED = '_to_be_exported.hpp' - def __init__(self, module_name, indexing_suite_version=1, *args ): + def __init__(self, module_name, *args, **keywd ): unittest.TestCase.__init__(self, *args) self.__module_name = module_name self.__to_be_exported_header \ @@ -28,8 +28,9 @@ , self.__module_name + '.cpp' ) self.__generated_scons_file_name = os.path.join( autoconfig.build_dir , self.__module_name + '.scons' ) - self.__indexing_suite_version = indexing_suite_version + self.__indexing_suite_version = keywd.get( 'indexing_suite_version', 1 ) + def failIfRaisesAny(self, callableObj, *args, **kwargs): try: callableObj(*args, **kwargs) Modified: pyplusplus_dev/unittests/indexing_suites2_tester.py =================================================================== --- pyplusplus_dev/unittests/indexing_suites2_tester.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/unittests/indexing_suites2_tester.py 2006-06-28 14:32:24 UTC (rev 260) @@ -17,9 +17,9 @@ def __init__( self, *args ): fundamental_tester_base.fundamental_tester_base_t.__init__( self - , tester_t.EXTENSION_NAME - , 2 - , *args ) + , tester_t.EXTENSION_NAME + , indexing_suite_version=2 + , *args) #~ @staticmethod #~ def matcher( item, decl ): @@ -30,10 +30,12 @@ #~ return True #~ return False - #~ def customize(self, generator): - #~ item = generator.class_( 'item_t' ) - #~ items = generator.class_( lambda decl: self.matcher( item, decl ) ) - #~ items.alias = "items_t" + def customize(self, generator): + ivector = generator.global_ns.typedef( 'ivector' ) + ivector = declarations.remove_declarated( ivector.type ) + ivector.indexing_suite.disable_method( 'extend' ) + ivector.indexing_suite.disable_methods_group( 'reorder' ) + #ivector.indexing_suite.call_policies = module_builder.call_policies.default_call_policies() def run_tests( self, module): iv = module.ivector() Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2006-06-28 09:16:40 UTC (rev 259) +++ pyplusplus_dev/unittests/test_all.py 2006-06-28 14:32:24 UTC (rev 260) @@ -109,7 +109,6 @@ , vector3_tester , default_args_tester , abstract_classes_tester - , classes_tester , indexing_suites2_tester ] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 09:49:26
|
Revision: 258 Author: roman_yakovenko Date: 2006-06-28 01:45:46 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=258&view=rev Log Message: ----------- one more step towards indexing suite 2 Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/test_all.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-28 08:45:46 UTC (rev 258) @@ -106,3 +106,4 @@ from array_1_registrator import array_1_registrator_t from indexing_suites import indexing_suite1_t +from indexing_suites import indexing_suite2_t Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-06-28 08:45:46 UTC (rev 258) @@ -13,6 +13,7 @@ import declaration_based import array_1_registrator import member_variable +import indexing_suites from pygccxml import declarations class class_declaration_t( scoped.scoped_t ): @@ -64,9 +65,9 @@ code = os.linesep.join( result ) - result = [ 'if( true ){' ] + result = [ '{ //scope begin' ] result.append( self.indent( code ) ) - result.append( '}' ) + result.append( '} //scope end' ) return os.linesep.join( result ) @@ -239,6 +240,8 @@ return ''.join( result ) def _should_creator_be_exported_under_scope(self, inst ): + if isinstance( inst, ( indexing_suites.indexing_suite1_t, indexing_suites.indexing_suite2_t ) ): + return False if isinstance( inst, declaration_based.declaration_based_t ) \ and isinstance( inst.declaration , ( declarations.enumeration_t, declarations.class_t ) ): @@ -290,9 +293,9 @@ code = os.linesep.join( result ) - result = [ 'if( true ){' ] + result = [ '{ //scope begin' ] result.append( self.indent( code ) ) - result.append( '}' ) + result.append( '} //scope end' ) return os.linesep.join( result ) Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-28 08:45:46 UTC (rev 258) @@ -10,16 +10,16 @@ import declaration_based from pygccxml import declarations -class indexing_suite1_t( code_creator.code_creator_t ): - def __init__(self, parent=None ): - code_creator.code_creator_t.__init__( self, parent=parent ) +class indexing_suite1_t( declaration_based.declaration_based_t ): + def __init__(self, container, parent=None ): + declaration_based.declaration_based_t.__init__( self, declaration=container, parent=parent ) def _get_configuration( self ): - return self.parent.declaration.indexing_suite + return self.declaration.indexing_suite configuration = property( _get_configuration ) def _get_container( self ): - return self.parent.declaration + return self.declaration container = property( _get_container ) def guess_suite_name( self ): @@ -46,20 +46,14 @@ return "def( %s() )" % self._create_suite_declaration() -#class indexing_suite2_t( code_creator.code_creator_t ): - #class value_traits_t( declaration_based_t ): - #def __init__( self, container_class, parent=None ): - #declaration_based_t.__init__( declaration=container_class, parent=parent ) +class indexing_suite2_t( declaration_based.declaration_based_t ): + def __init__(self, container, parent=None ): + declaration_based.declaration_based_t.__init__( self, declaration=container, parent=parent ) + + def _get_configuration( self ): + return self.declaration.indexing_suite + configuration = property( _get_configuration ) - #def _create_impl( self - - #def __init__(self, parent=None ): - #code_creator.code_creator_t.__init__( self, parent=parent ) - - #def _get_configuration( self ): - #return self.parent.declaration.indexing_suite - #configuration = property( _get_configuration ) - - #def _get_container( self ): - #return self.parent.declaration - #container = property( _get_container ) + def _create_impl( self ): + container_suite = algorithm.create_identifier(self, "::boost::python::indexing::container_suite" ) + return "def( %s< %s >() )" % ( container_suite, self.decl_identifier ) \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-28 08:45:46 UTC (rev 258) @@ -7,7 +7,7 @@ import decl_wrapper import scopedef_wrapper from pygccxml import declarations -import indexing_suite as isuite1 +import indexing_suite1 as isuite1 import indexing_suite2 as isuite2 class class_common_impl_details_t( object ): @@ -27,7 +27,11 @@ indexing_suite_version = property( _get_indexing_suite_version, _set_indexing_suite_version ) def _get_always_expose_using_scope( self ): - return self._always_expose_using_scope + #I am almost sure this logic should be moved to code_creators + if isinstance( self.indexing_suite, isuite2.indexing_suite2_t ) \ + and ( self.indexing_suite.disable_methods or self.indexing_suite.disabled_methods_groups ): + return True + return self._always_expose_using_scope def _set_always_expose_using_scope( self, value ): self._always_expose_using_scope = value always_expose_using_scope = property( _get_always_expose_using_scope, _set_always_expose_using_scope ) @@ -91,12 +95,6 @@ self._null_constructor_body = '' self._copy_constructor_body = '' - def _get_always_expose_using_scope( self ): - return self._always_expose_using_scope - def _set_always_expose_using_scope( self, value ): - self._always_expose_using_scope = value - always_expose_using_scope = property( _get_always_expose_using_scope, _set_always_expose_using_scope ) - def _get_redefine_operators( self ): return self._redefine_operators def _set_redefine_operators( self, new_value ): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 08:45:46 UTC (rev 258) @@ -4,30 +4,53 @@ # http://www.boost.org/LICENSE_1_0.txt) from pygccxml import declarations -#NoProxy -#By default indexed elements have Python reference semantics and are returned by -#proxy. This can be disabled by supplying true in the NoProxy template parameter. -#When we want to disable is: -#1. We deal with immutable objects: -# 1. fundamental types -# 2. enum type -# 3. std::[w]string -# 4. std::complex -# 5. shared_ptr +""" +method_len +method_iter +method_getitem +method_getitem_slice +method_index +method_contains +method_count +method_has_key +method_setitem +method_setitem_slice +method_delitem +method_delitem_slice +method_reverse +method_append +method_insert +method_extend +method_sort +slice_methods = method_getitem_slice | method_setitem_slice | method_delitem_slice +search_methods = method_index | method_contains | method_count | method_has_key +reorder_methods = method_sort | method_reverse +insert_methods = method_append | method_insert | method_extend +""" + + class indexing_suite2_t( object ): + METHODS = ( 'len', 'iter', 'getitem', 'getitem_slice', 'index', 'contains' + , 'count', 'has_key', 'setitem', 'setitem_slice', 'delitem' + , 'delitem_slice', 'reverse', 'append', 'insert', 'extend', 'sort' ) + + METHOD_GROUPS = { + 'slice_methods' : ( 'method_getitem_slice', 'method_setitem_slice', 'method_delitem_slice' ) + , 'search_methods' : ( 'method_index', 'method_contains', 'method_count', 'method_has_key' ) + , 'reorder_methods' : ( 'method_sort', 'method_reverse' ) + , 'insert_methods' : ( 'method_append', 'method_insert', 'method_extend' ) + } + def __init__( self, container_class, container_traits ): object.__init__( self ) self.__call_policies = None self.__container_class = container_class self.__container_traits = container_traits - self.__disable_len = None - self.__disable_slices = None - self.__disable_search = None - self.__disable_reorder = None - self.__disable_extend = None - self.__disable_insert = None - + self._disabled_methods = set() + self._disabled_groups = set() + self._default_applied = False + def _get_container_class( self ): return self.__container_class container_class = property( _get_container_class ) @@ -43,46 +66,42 @@ self.__call_policies = call_policies call_policies = property( _get_call_policies, _set_call_policies ) - def _get_disable_len( self ): - return self.__disable_len - def _set_disable_len( self, value ): - self.__disable_len = value - disable_len = property( _get_disable_len, _set_disable_len ) + def __apply_defaults_if_needed( self ): + if self._default_applied: + return + self._default_applied = True + #find out what operators are supported by value_type and + #then configure the _disable_[methods|groups] + pass + + def disable_method( self, method_name ): + assert method_name in self.METHODS + self.__apply_defaults_if_needed() + self._disabled_methods.add( method_name ) + + def enable_method( self, method_name ): + assert method_name in self.METHODS + self.__apply_defaults_if_needed() + if method_name in self._disabled_methods: + self._disabled_methods.remove( method_name ) - def _get_disable_slices( self ): - return self.__disable_slices - def _set_disable_slices( self, value ): - self.__disable_slices = value - disable_slices = property( _get_disable_slices, _set_disable_slices ) + def _get_disabled_methods( self ): + self.__apply_defaults_if_needed() + return self._disabled_methods + disable_methods = property( _get_disabled_methods ) + + def disable_methods_group( self, group_name ): + assert group_name in self.METHOD_GROUPS + self.__apply_defaults_if_needed() + self._disabled_groups.add( group_name ) + + def enable_methods_group( self, group_name ): + assert group_name in self.METHOD_GROUPS + self.__apply_defaults_if_needed() + if group_name in self._disabled_groups: + self._disabled_groups.remove( group_name ) - def _get_disable_search( self ): #need operator== - if None is self.__disable_search: - value_type = self.container_traits.value_type( self.container_class ) - if not declarations.has_public_equal( value_type ): - self.__disable_search = True - return self.__disable_search - def _set_disable_search( self, value ): - self.__disable_search = value - disable_search = property( _get_disable_search, _set_disable_search ) - - def _get_disable_reorder( self ): #need operator< - if None is self.__disable_reorder: - value_type = self.container_traits.value_type( self.container_class ) - if not declarations.has_public_less( value_type ): - self.__disable_reorder = True - return self.__disable_reorder - def _set_disable_reorder( self, value ): - self.__disable_reorder = value - disable_reorder = property( _get_disable_reorder, _set_disable_reorder ) - - def _get_disable_extend( self ): - return self.__disable_extend - def _set_disable_extend( self, value ): - self.__disable_extend = value - disable_extend = property( _get_disable_extend, _set_disable_extend ) - - def _get_disable_insert( self ): - return self.__disable_insert - def _set_disable_insert( self, value ): - self.__disable_insert = value - disable_insert = property( _get_disable_insert, _set_disable_insert ) + def _get_disabled_methods_groups( self ): + self.__apply_defaults_if_needed() + return self._disabled_groups + disabled_methods_groups = property( _get_disabled_methods_groups ) \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-28 08:45:46 UTC (rev 258) @@ -370,28 +370,49 @@ return #supported container : [ header file, is already used ] + isuite1 = { 'vector<' : [ "boost/python/suite/indexing/vector_indexing_suite.hpp", False ] , 'map<' : [ "boost/python/suite/indexing/map_indexing_suite.hpp", False ] } + #include <boost/python/suite/indexing/vector.hpp> + + container_suite_header_was_used = False + container_suite_header = "boost/python/suite/indexing/container_suite.hpp" + isuite2 = { + 'vector<' : [ "boost/python/suite/indexing/vector.hpp", False ] + } + for cls in self.__types_db.used_containers: container_name = cls.name.split( '<' )[0] + '<' + + if isinstance( cls.indexing_suite, decl_wrappers.indexing_suite1_t ): + isuite = isuite1 + else: + isuite = isuite2 + if not isuite1.has_key( container_name ): continue #not supported - if not cls.name.startswith( 'vector<') and not cls.name.startswith( 'map<'): - continue - if not isuite1[ container_name ][1]: + if isuite is isuite2 and not container_suite_header_was_used: + container_suite_header_was_used = True + self.__extmodule.add_system_header( container_suite_header ) + self.__extmodule.add_include( container_suite_header ) + + if not isuite[ container_name ][1]: isuite1[ container_name ][1] = True - self.__extmodule.add_system_header( isuite1[ container_name ][0] ) - self.__extmodule.add_include( header=isuite1[ container_name ][0] ) + self.__extmodule.add_system_header( isuite[ container_name ][0] ) + self.__extmodule.add_include( header=isuite[ container_name ][0] ) cls_creator = create_cls_cc( cls ) - value_type = cls.indexing_suite.value_type() - if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): - cls_creator.adopt_creator( create_explanation( cls ) ) - cls_creator.adopt_creator( code_creators.indexing_suite1_t() ) + if isuite is isuite1: + value_type = cls.indexing_suite.value_type() + if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): + cls_creator.adopt_creator( create_explanation( cls ) ) + cls_creator.adopt_creator( code_creators.indexing_suite1_t(cls) ) + else: + cls_creator.adopt_creator( code_creators.indexing_suite2_t(cls) ) self.__module_body.adopt_creator( cls_creator ) def create(self, decl_headers=None): Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2006-06-28 05:28:23 UTC (rev 257) +++ pyplusplus_dev/unittests/test_all.py 2006-06-28 08:45:46 UTC (rev 258) @@ -4,7 +4,9 @@ # http://www.boost.org/LICENSE_1_0.txt) import sys import unittest - + +import classes_tester +import abstract_classes_tester import algorithms_tester import module_body_tester import enums_tester @@ -105,6 +107,8 @@ , hierarchy3_tester , vector3_tester , default_args_tester + , abstract_classes_tester + , classes_tester ] main_suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 09:16:57
|
Revision: 259 Author: roman_yakovenko Date: 2006-06-28 02:16:40 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=259&view=rev Log Message: ----------- adding unit test for indexing suite 2 Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py pyplusplus_dev/pyplusplus/module_creator/types_database.py pyplusplus_dev/unittests/fundamental_tester_base.py pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp pyplusplus_dev/unittests/indexing_suites2_tester.py Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 08:45:46 UTC (rev 258) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-28 09:16:40 UTC (rev 259) @@ -58,6 +58,9 @@ def _get_container_traits( self ): return self._get_container_traits() container_traits = property( _get_container_traits ) + + def value_type( self ): + return self.__container_traits.value_type( self.container_class ) def _get_call_policies( self ): #TODO find out call policies Modified: pyplusplus_dev/pyplusplus/module_creator/types_database.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-28 08:45:46 UTC (rev 258) +++ pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-28 09:16:40 UTC (rev 259) @@ -65,7 +65,7 @@ return False try: - #checking whether value_type could be extracted + #checking whether value_type could be extracted container_cls.indexing_suite.value_type() except RuntimeError, error: msg = 'WARNING: pyplusplus found "%s" instantiation declaration, ' % container_cls.name Added: pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/indexing_suites2_to_be_exported.hpp 2006-06-28 09:16:40 UTC (rev 259) @@ -0,0 +1,44 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __indexing_suites2_to_be_exported_hpp__ +#define __indexing_suites2_to_be_exported_hpp__ + +#include <vector> + +namespace indexing_suites2 { + +//~ struct item_t{ + //~ item_t() : value( -1 ){} + + //~ bool operator==(item_t const& item) const { + //~ return value == item.value; + //~ } + + //~ bool operator!=(item_t const& item) const { + //~ return value != item.value; + //~ } + + //~ int value; +//~ }; + + +//~ typedef std::vector<item_t> items_t; + +//~ inline item_t get_value( const std::vector<item_t>& vec, unsigned int index ){ + //~ return vec.at(index); +//~ } + +//~ inline void set_value( std::vector<item_t>& vec, unsigned int index, item_t value ){ + //~ vec.at(index); + //~ vec[index] = value; +//~ } + +typedef std::vector<int> ivector; +ivector empty_ivector(){ return ivector(); } + +} + +#endif//__indexing_suites2_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/fundamental_tester_base.py =================================================================== --- pyplusplus_dev/unittests/fundamental_tester_base.py 2006-06-28 08:45:46 UTC (rev 258) +++ pyplusplus_dev/unittests/fundamental_tester_base.py 2006-06-28 09:16:40 UTC (rev 259) @@ -17,7 +17,7 @@ class fundamental_tester_base_t( unittest.TestCase ): SUFFIX_TO_BE_EXPORTED = '_to_be_exported.hpp' - def __init__(self, module_name, *args ): + def __init__(self, module_name, indexing_suite_version=1, *args ): unittest.TestCase.__init__(self, *args) self.__module_name = module_name self.__to_be_exported_header \ @@ -28,7 +28,8 @@ , self.__module_name + '.cpp' ) self.__generated_scons_file_name = os.path.join( autoconfig.build_dir , self.__module_name + '.scons' ) - + self.__indexing_suite_version = indexing_suite_version + def failIfRaisesAny(self, callableObj, *args, **kwargs): try: callableObj(*args, **kwargs) @@ -53,7 +54,8 @@ mb = module_builder.module_builder_t( [self.__to_be_exported_header] , gccxml_path=autoconfig.gccxml.executable , include_paths=[autoconfig.boost.include] - , undefine_symbols=['__MINGW32__'] ) + , undefine_symbols=['__MINGW32__'] + , indexing_suite_version=self.__indexing_suite_version) self.customize( mb ) if not mb.has_code_creator(): mb.build_code_creator( self.__module_name ) Added: pyplusplus_dev/unittests/indexing_suites2_tester.py =================================================================== --- pyplusplus_dev/unittests/indexing_suites2_tester.py (rev 0) +++ pyplusplus_dev/unittests/indexing_suites2_tester.py 2006-06-28 09:16:40 UTC (rev 259) @@ -0,0 +1,56 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import sys +import unittest +import fundamental_tester_base +from pygccxml import declarations +from pyplusplus import module_builder + + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'indexing_suites2' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , 2 + , *args ) + + #~ @staticmethod + #~ def matcher( item, decl ): + #~ if not declarations.vector_traits.is_my_case( decl ): + #~ return False + #~ value_type = declarations.vector_traits.value_type(decl) + #~ if item is value_type: + #~ return True + #~ return False + + #~ def customize(self, generator): + #~ item = generator.class_( 'item_t' ) + #~ items = generator.class_( lambda decl: self.matcher( item, decl ) ) + #~ items.alias = "items_t" + + def run_tests( self, module): + iv = module.ivector() + #~ items = module.items_t() + #~ item = module.item_t() + #~ item.value = 1977 + #~ items.append( item ) + #~ self.failUnless( module.get_value( items, 0 ).value == 1977 ) + #~ self.failUnless( len( items ) == 1 ) + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2006-06-28 08:45:46 UTC (rev 258) +++ pyplusplus_dev/unittests/test_all.py 2006-06-28 09:16:40 UTC (rev 259) @@ -52,7 +52,8 @@ import factory_tester import private_assign_tester import protected_tester -import indexing_suites_tester +import indexing_suites_tester +import indexing_suites2_tester import hierarchy3_tester import vector3_tester import default_args_tester @@ -109,6 +110,7 @@ , default_args_tester , abstract_classes_tester , classes_tester + , indexing_suites2_tester ] main_suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 05:28:33
|
Revision: 257 Author: roman_yakovenko Date: 2006-06-27 22:28:23 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=257&view=rev Log Message: ----------- renaming indexing_suite.py to indexing_suite1.py Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py Removed Paths: ------------- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-28 05:26:53 UTC (rev 256) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-28 05:28:23 UTC (rev 257) @@ -86,7 +86,7 @@ from user_text import user_text_t from user_text import class_user_text_t -from indexing_suite import indexing_suite1_t +from indexing_suite1 import indexing_suite1_t from indexing_suite2 import indexing_suite2_t Deleted: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-28 05:26:53 UTC (rev 256) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-28 05:28:23 UTC (rev 257) @@ -1,57 +0,0 @@ -# Copyright 2004 Roman Yakovenko. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -from pygccxml import declarations - -#NoProxy -#By default indexed elements have Python reference semantics and are returned by -#proxy. This can be disabled by supplying true in the NoProxy template parameter. -#When we want to disable is: -#1. We deal with immutable objects: -# 1. fundamental types -# 2. enum type -# 3. std::[w]string -# 4. std::complex -# 5. shared_ptr - -class indexing_suite1_t( object ): - def __init__( self, container_class, container_traits, no_proxy=None, derived_policies=None ): - object.__init__( self ) - self.__no_proxy = no_proxy - self.__derived_policies = None - self.__container_class = container_class - self.__container_traits = container_traits - - def _get_container_class( self ): - return self.__container_class - container_class = property( _get_container_class ) - - def value_type(self): - return self.__container_traits.value_type( self.container_class ) - - def _get_no_proxy( self ): - if self.__no_proxy is None: - value_type = self.value_type() - if declarations.is_fundamental( value_type ) \ - or declarations.is_enum( value_type ) \ - or declarations.is_std_string( value_type ) \ - or declarations.is_std_wstring( value_type ) \ - or declarations.smart_pointer_traits.is_smart_pointer( value_type ): - self.__no_proxy = True - else: - self.__no_proxy = False - return self.__no_proxy - - def _set_no_proxy( self, no_proxy ): - self.__no_proxy = no_proxy - - no_proxy = property( _get_no_proxy, _set_no_proxy ) - - def _get_derived_policies( self ): - return self.__derived_policies - def _set_derived_policies( self, derived_policies ): - self.__derived_policies = derived_policies - derived_policies = property( _get_derived_policies, _set_derived_policies ) - \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 05:27:02
|
Revision: 256 Author: roman_yakovenko Date: 2006-06-27 22:26:53 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=256&view=rev Log Message: ----------- renaming indexing_suite.py to indexing_suite1.py Added Paths: ----------- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite1.py Copied: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite1.py (from rev 254, pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py) =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite1.py (rev 0) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite1.py 2006-06-28 05:26:53 UTC (rev 256) @@ -0,0 +1,57 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +from pygccxml import declarations + +#NoProxy +#By default indexed elements have Python reference semantics and are returned by +#proxy. This can be disabled by supplying true in the NoProxy template parameter. +#When we want to disable is: +#1. We deal with immutable objects: +# 1. fundamental types +# 2. enum type +# 3. std::[w]string +# 4. std::complex +# 5. shared_ptr + +class indexing_suite1_t( object ): + def __init__( self, container_class, container_traits, no_proxy=None, derived_policies=None ): + object.__init__( self ) + self.__no_proxy = no_proxy + self.__derived_policies = None + self.__container_class = container_class + self.__container_traits = container_traits + + def _get_container_class( self ): + return self.__container_class + container_class = property( _get_container_class ) + + def value_type(self): + return self.__container_traits.value_type( self.container_class ) + + def _get_no_proxy( self ): + if self.__no_proxy is None: + value_type = self.value_type() + if declarations.is_fundamental( value_type ) \ + or declarations.is_enum( value_type ) \ + or declarations.is_std_string( value_type ) \ + or declarations.is_std_wstring( value_type ) \ + or declarations.smart_pointer_traits.is_smart_pointer( value_type ): + self.__no_proxy = True + else: + self.__no_proxy = False + return self.__no_proxy + + def _set_no_proxy( self, no_proxy ): + self.__no_proxy = no_proxy + + no_proxy = property( _get_no_proxy, _set_no_proxy ) + + def _get_derived_policies( self ): + return self.__derived_policies + def _set_derived_policies( self, derived_policies ): + self.__derived_policies = derived_policies + derived_policies = property( _get_derived_policies, _set_derived_policies ) + \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-28 05:24:16
|
Revision: 255 Author: roman_yakovenko Date: 2006-06-27 22:24:09 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=255&view=rev Log Message: ----------- adding test case for bug reported by Allen Modified Paths: -------------- pyplusplus_dev/unittests/data/enums_to_be_exported.hpp Modified: pyplusplus_dev/unittests/data/enums_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/enums_to_be_exported.hpp 2006-06-27 19:36:38 UTC (rev 254) +++ pyplusplus_dev/unittests/data/enums_to_be_exported.hpp 2006-06-28 05:24:09 UTC (rev 255) @@ -13,6 +13,9 @@ , green = 2 , blue = 4 }; +inline int to_int( int x=red ){ return x; } + } + #endif//__enums_to_be_exported_hpp__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-27 19:36:56
|
Revision: 254 Author: roman_yakovenko Date: 2006-06-27 12:36:38 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=254&view=rev Log Message: ----------- indexing suite 2 Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py pyplusplus_dev/pyplusplus/module_builder/builder.py pyplusplus_dev/pyplusplus/module_creator/creator.py Added Paths: ----------- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-27 19:36:38 UTC (rev 254) @@ -105,4 +105,4 @@ from array_1_registrator import array_1_registrator_t -from indexing_suites import indexing_suite_t +from indexing_suites import indexing_suite1_t Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-27 19:36:38 UTC (rev 254) @@ -10,7 +10,7 @@ import declaration_based from pygccxml import declarations -class indexing_suite_t( code_creator.code_creator_t ): +class indexing_suite1_t( code_creator.code_creator_t ): def __init__(self, parent=None ): code_creator.code_creator_t.__init__( self, parent=parent ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-27 19:36:38 UTC (rev 254) @@ -86,7 +86,8 @@ from user_text import user_text_t from user_text import class_user_text_t -from indexing_suite import indexing_suite_t +from indexing_suite import indexing_suite1_t +from indexing_suite2 import indexing_suite2_t class dwfactory_t( declarations.decl_factory_t ): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-27 19:36:38 UTC (rev 254) @@ -7,8 +7,8 @@ import decl_wrapper import scopedef_wrapper from pygccxml import declarations -import indexing_suite as container_suites - +import indexing_suite as isuite1 +import indexing_suite2 as isuite2 class class_common_impl_details_t( object ): def __init__(self): @@ -17,7 +17,15 @@ self._indexing_suite = None self._equality_comparable = None self._lessthan_comparable = None - + self._isuite_version = 1 + + def _get_indexing_suite_version( self ): + return self._isuite_version + def _set_indexing_suite_version( self, version ): + assert version in ( 1, 2 ) + self._isuite_version = version + indexing_suite_version = property( _get_indexing_suite_version, _set_indexing_suite_version ) + def _get_always_expose_using_scope( self ): return self._always_expose_using_scope def _set_always_expose_using_scope( self, value ): @@ -28,7 +36,10 @@ if self._indexing_suite is None: for container_traits in declarations.all_container_traits: if container_traits.is_my_case( self ): - self._indexing_suite = container_suites.indexing_suite_t( self, container_traits ) + if self._isuite_version == 1: + self._indexing_suite = isuite1.indexing_suite1_t( self, container_traits ) + else: + self._indexing_suite = isuite2.indexing_suite2_t( self, container_traits ) break return self._indexing_suite indexing_suite = property( _get_indexing_suite ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-27 19:36:38 UTC (rev 254) @@ -16,7 +16,7 @@ # 4. std::complex # 5. shared_ptr -class indexing_suite_t( object ): +class indexing_suite1_t( object ): def __init__( self, container_class, container_traits, no_proxy=None, derived_policies=None ): object.__init__( self ) self.__no_proxy = no_proxy Added: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py (rev 0) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2006-06-27 19:36:38 UTC (rev 254) @@ -0,0 +1,88 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +from pygccxml import declarations + +#NoProxy +#By default indexed elements have Python reference semantics and are returned by +#proxy. This can be disabled by supplying true in the NoProxy template parameter. +#When we want to disable is: +#1. We deal with immutable objects: +# 1. fundamental types +# 2. enum type +# 3. std::[w]string +# 4. std::complex +# 5. shared_ptr + +class indexing_suite2_t( object ): + def __init__( self, container_class, container_traits ): + object.__init__( self ) + self.__call_policies = None + self.__container_class = container_class + self.__container_traits = container_traits + self.__disable_len = None + self.__disable_slices = None + self.__disable_search = None + self.__disable_reorder = None + self.__disable_extend = None + self.__disable_insert = None + + def _get_container_class( self ): + return self.__container_class + container_class = property( _get_container_class ) + + def _get_container_traits( self ): + return self._get_container_traits() + container_traits = property( _get_container_traits ) + + def _get_call_policies( self ): + #TODO find out call policies + return self.__call_policies + def _set_call_policies( self, call_policies ): + self.__call_policies = call_policies + call_policies = property( _get_call_policies, _set_call_policies ) + + def _get_disable_len( self ): + return self.__disable_len + def _set_disable_len( self, value ): + self.__disable_len = value + disable_len = property( _get_disable_len, _set_disable_len ) + + def _get_disable_slices( self ): + return self.__disable_slices + def _set_disable_slices( self, value ): + self.__disable_slices = value + disable_slices = property( _get_disable_slices, _set_disable_slices ) + + def _get_disable_search( self ): #need operator== + if None is self.__disable_search: + value_type = self.container_traits.value_type( self.container_class ) + if not declarations.has_public_equal( value_type ): + self.__disable_search = True + return self.__disable_search + def _set_disable_search( self, value ): + self.__disable_search = value + disable_search = property( _get_disable_search, _set_disable_search ) + + def _get_disable_reorder( self ): #need operator< + if None is self.__disable_reorder: + value_type = self.container_traits.value_type( self.container_class ) + if not declarations.has_public_less( value_type ): + self.__disable_reorder = True + return self.__disable_reorder + def _set_disable_reorder( self, value ): + self.__disable_reorder = value + disable_reorder = property( _get_disable_reorder, _set_disable_reorder ) + + def _get_disable_extend( self ): + return self.__disable_extend + def _set_disable_extend( self, value ): + self.__disable_extend = value + disable_extend = property( _get_disable_extend, _set_disable_extend ) + + def _get_disable_insert( self ): + return self.__disable_insert + def _set_disable_insert( self, value ): + self.__disable_insert = value + disable_insert = property( _get_disable_insert, _set_disable_insert ) Modified: pyplusplus_dev/pyplusplus/module_builder/builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-06-27 19:36:38 UTC (rev 254) @@ -34,7 +34,8 @@ , compilation_mode=None , cache=None , optimize_queries=True - , ignore_gccxml_output=False): + , ignore_gccxml_output=False + , indexing_suite_version=1): """ @param files: list of files, declarations from them you want to export @type files: list of strings or L{file_configuration_t} instances @@ -76,11 +77,12 @@ self.__global_ns = self.__parse_declarations( files , gccxml_config , compilation_mode - , cache ) + , cache + , indexing_suite_version) self.__code_creator = None if optimize_queries: self.run_query_optimizer() - + def _get_global_ns( self ): return self.__global_ns global_ns = property( _get_global_ns, doc="reference to global namespace" ) @@ -93,7 +95,7 @@ """ self.__global_ns.init_optimizer() - def __parse_declarations( self, files, gccxml_config, compilation_mode, cache ): + def __parse_declarations( self, files, gccxml_config, compilation_mode, cache, indexing_suite_version ): if None is gccxml_config: gccxml_config = parser.config_t() if None is compilation_mode: @@ -102,16 +104,23 @@ _logging_.logger.debug( 'parsing files - started' ) reader = parser.project_reader_t( gccxml_config, cache, decl_wrappers.dwfactory_t() ) decls = reader.read_files( files, compilation_mode ) + _logging_.logger.debug( 'parsing files - done( %f seconds )' % ( time.clock() - start_time ) ) _logging_.logger.debug( 'settings declarations defaults- started' ) + + global_ns = decls_package.matcher.get_single( + decls_package.namespace_matcher_t( name='::' ) + , decls ) + if indexing_suite_version != 1: + for cls in global_ns.classes(): + cls.indexing_suite_version = indexing_suite_version + start_time = time.clock() self.__apply_decls_defaults(decls) _logging_.logger.debug( 'settings declarations defaults - done( %f seconds )' % ( time.clock() - start_time ) ) - return decls_package.matcher.get_single( - decls_package.namespace_matcher_t( name='::' ) - , decls ) - + return global_ns + def __filter_by_location( self, flatten_decls ): for decl in flatten_decls: if not decl.location: Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-27 08:23:42 UTC (rev 253) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-27 19:36:38 UTC (rev 254) @@ -391,7 +391,7 @@ value_type = cls.indexing_suite.value_type() if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): cls_creator.adopt_creator( create_explanation( cls ) ) - cls_creator.adopt_creator( code_creators.indexing_suite_t() ) + cls_creator.adopt_creator( code_creators.indexing_suite1_t() ) self.__module_body.adopt_creator( cls_creator ) def create(self, decl_headers=None): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-27 08:23:58
|
Revision: 253 Author: roman_yakovenko Date: 2006-06-27 01:23:42 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=253&view=rev Log Message: ----------- preparing source code for indexing suite 2 Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/type_traits.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/pyplusplus/module_creator/types_database.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-27 05:51:08 UTC (rev 252) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-27 08:23:42 UTC (rev 253) @@ -110,6 +110,7 @@ from type_traits import is_void from type_traits import is_void_pointer from type_traits import is_class +from type_traits import is_class_declaration from type_traits import is_const from type_traits import base_type from type_traits import is_array @@ -138,6 +139,7 @@ from type_traits import remove_pointer from type_traits import remove_volatile from type_traits import remove_reference +from type_traits import remove_declarated from type_traits import has_destructor from type_traits import has_trivial_copy @@ -165,8 +167,25 @@ from container_traits import set_traits from container_traits import hash_set_traits from container_traits import multiset_traits -from container_traits import hash_multiset_traits +from container_traits import hash_multiset_traits +all_container_traits = [ + list_traits + , deque_traits + , queue_traits + , priority_queue + , vector_traits + , stack_traits + , map_traits + , multimap_traits + , hash_map_traits + , hash_multimap_traits + , set_traits + , hash_set_traits + , multiset_traits + , hash_multiset_traits +] + import templates import call_invocation @@ -256,7 +275,6 @@ impl_matchers[ scopedef.scopedef_t.typedef ] = declaration_matcher_t impl_decl_types[ scopedef.scopedef_t.typedef ] = typedef_t - impl_matchers[ namespace_t.namespace ] = namespace_matcher_t impl_matchers[ namespace_t.free_function ] = calldef_matcher_t Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-27 05:51:08 UTC (rev 252) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-27 08:23:42 UTC (rev 253) @@ -278,11 +278,17 @@ def is_class(type): """returns True if type represents C++ class""" nake_type = remove_alias( type ) - nake_type = remove_reference( nake_type ) nake_type = remove_cv( nake_type ) nake_type = remove_declarated( nake_type ) return isinstance( nake_type, class_declaration.class_t) +def is_class_declaration(type): + """returns True if type represents C++ class""" + nake_type = remove_alias( type ) + nake_type = remove_cv( nake_type ) + nake_type = remove_declarated( nake_type ) + return isinstance( nake_type, class_declaration.class_declaration_t) + def find_trivial_constructor( type ): """returns reference to trivial constructor or None""" assert isinstance( type, class_declaration.class_t ) Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-27 05:51:08 UTC (rev 252) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-27 08:23:42 UTC (rev 253) @@ -7,6 +7,7 @@ import types import algorithm import code_creator +import declaration_based from pygccxml import declarations class indexing_suite_t( code_creator.code_creator_t ): @@ -43,4 +44,22 @@ def _create_impl(self): return "def( %s() )" % self._create_suite_declaration() - \ No newline at end of file + + +#class indexing_suite2_t( code_creator.code_creator_t ): + #class value_traits_t( declaration_based_t ): + #def __init__( self, container_class, parent=None ): + #declaration_based_t.__init__( declaration=container_class, parent=parent ) + + #def _create_impl( self + + #def __init__(self, parent=None ): + #code_creator.code_creator_t.__init__( self, parent=parent ) + + #def _get_configuration( self ): + #return self.parent.declaration.indexing_suite + #configuration = property( _get_configuration ) + + #def _get_container( self ): + #return self.parent.declaration + #container = property( _get_container ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-27 05:51:08 UTC (rev 252) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-27 08:23:42 UTC (rev 253) @@ -10,25 +10,13 @@ import indexing_suite as container_suites -def guess_container_traits( class_ ): - if declarations.vector_traits.is_my_case( class_ ): - return declarations.vector_traits - elif declarations.list_traits.is_my_case( class_ ): - return declarations.list_traits - elif declarations.map_traits.is_my_case( class_ ): - return declarations.map_traits - elif declarations.hash_map_traits.is_my_case( class_ ): - declarations.hash_map_traits - else: - return None - -#this will only be exported if indexing suite is not None and only when needed -class class_declaration_t(decl_wrapper.decl_wrapper_t, declarations.class_declaration_t): - def __init__(self, *arguments, **keywords): - declarations.class_declaration_t.__init__(self, *arguments, **keywords ) - decl_wrapper.decl_wrapper_t.__init__( self ) +class class_common_impl_details_t( object ): + def __init__(self): + object.__init__( self ) self._always_expose_using_scope = False self._indexing_suite = None + self._equality_comparable = None + self._lessthan_comparable = None def _get_always_expose_using_scope( self ): return self._always_expose_using_scope @@ -38,25 +26,57 @@ def _get_indexing_suite( self ): if self._indexing_suite is None: - container_traits = guess_container_traits( self ) - if container_traits: - self._indexing_suite = container_suites.indexing_suite_t( self, container_traits ) + for container_traits in declarations.all_container_traits: + if container_traits.is_my_case( self ): + self._indexing_suite = container_suites.indexing_suite_t( self, container_traits ) + break return self._indexing_suite indexing_suite = property( _get_indexing_suite ) + + def _get_equality_comparable( self ): + if None is self._equality_comparable: + self._equality_comparable = declarations.has_public_equal( self ) + return self._equality_comparable + + def _set_equality_comparable( self, value ): + self._equality_comparable = value + + equality_comparable = property( _get_equality_comparable, _set_equality_comparable ) -class class_t(scopedef_wrapper.scopedef_t, declarations.class_t): + def _get_lessthan_comparable( self ): + if None is self._lessthan_comparable: + self._lessthan_comparable = declarations.has_public_less( self ) + return self._lessthan_comparable + + def _set_lessthan_comparable( self, value ): + self._lessthan_comparable = value + + lessthan_comparable = property( _get_lessthan_comparable, _set_lessthan_comparable ) + + +#this will only be exported if indexing suite is not None and only when needed +class class_declaration_t( class_common_impl_details_t + , decl_wrapper.decl_wrapper_t + , declarations.class_declaration_t ): def __init__(self, *arguments, **keywords): + class_common_impl_details_t.__init__( self ) + declarations.class_declaration_t.__init__(self, *arguments, **keywords ) + decl_wrapper.decl_wrapper_t.__init__( self ) + +class class_t( class_common_impl_details_t + , scopedef_wrapper.scopedef_t + , declarations.class_t): + def __init__(self, *arguments, **keywords): + class_common_impl_details_t.__init__( self ) declarations.class_t.__init__(self, *arguments, **keywords ) scopedef_wrapper.scopedef_t.__init__( self ) - self._always_expose_using_scope = False self._redefine_operators = False self._held_type = None self._noncopyable = None self._wrapper_alias = self._generate_valid_name() + "_wrapper" self._user_code = [] self._wrapper_user_code = [] - self._indexing_suite = None self._null_constructor_body = '' self._copy_constructor_body = '' @@ -113,15 +133,6 @@ def _set_wrapper_user_code( self, value ): self._wrapper_user_code = value wrapper_user_code = property( _get_wrapper_user_code, _set_wrapper_user_code ) - - def _get_indexing_suite( self ): - if self._indexing_suite is None: - container_traits = guess_container_traits( self ) - if container_traits: - self._indexing_suite \ - = container_suites.indexing_suite_t( self, container_traits ) - return self._indexing_suite - indexing_suite = property( _get_indexing_suite ) def _get_null_constructor_body(self): return self._null_constructor_body Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-27 05:51:08 UTC (rev 252) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-27 08:23:42 UTC (rev 253) @@ -369,22 +369,23 @@ if not self.__types_db.used_containers: return - map_header_was_used = False - vector_header_was_used = False - + #supported container : [ header file, is already used ] + isuite1 = { + 'vector<' : [ "boost/python/suite/indexing/vector_indexing_suite.hpp", False ] + , 'map<' : [ "boost/python/suite/indexing/map_indexing_suite.hpp", False ] + } + for cls in self.__types_db.used_containers: - if cls.name.startswith( 'vector' ): - if not vector_header_was_used: - vector_header_was_used = True - header = "boost/python/suite/indexing/vector_indexing_suite.hpp" - self.__extmodule.add_system_header( header ) - self.__extmodule.add_include( header=header ) - else: - if not map_header_was_used: - map_header_was_used = True - header = "boost/python/suite/indexing/map_indexing_suite.hpp" - self.__extmodule.add_system_header( header ) - self.__extmodule.add_include( header=header ) + container_name = cls.name.split( '<' )[0] + '<' + if not isuite1.has_key( container_name ): + continue #not supported + if not cls.name.startswith( 'vector<') and not cls.name.startswith( 'map<'): + continue + + if not isuite1[ container_name ][1]: + isuite1[ container_name ][1] = True + self.__extmodule.add_system_header( isuite1[ container_name ][0] ) + self.__extmodule.add_include( header=isuite1[ container_name ][0] ) cls_creator = create_cls_cc( cls ) value_type = cls.indexing_suite.value_type() Modified: pyplusplus_dev/pyplusplus/module_creator/types_database.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-27 05:51:08 UTC (rev 252) +++ pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-27 08:23:42 UTC (rev 253) @@ -54,30 +54,29 @@ type = declarations.remove_alias( type ) type = declarations.remove_pointer( type ) type = declarations.remove_reference( type ) + type = declarations.remove_cv( type ) + type = declarations.remove_declarated( type ) - traits = None - if declarations.vector_traits.is_my_case( type ): - traits = declarations.vector_traits - elif declarations.map_traits.is_my_case( type ): - traits = declarations.map_traits - elif declarations.hash_map_traits.is_my_case( type ): - traits = declarations.hash_map_traits - else: - pass - if None is traits: + if not declarations.is_class( type ) and not declarations.is_class_declaration( type ): return False - try: - cls = traits.class_declaration( type ) - traits.value_type( cls ) - self.__containers.add( cls ) - return True + + container_cls = type + if None is container_cls.indexing_suite: + return False + + try: + #checking whether value_type could be extracted + container_cls.indexing_suite.value_type() except RuntimeError, error: - msg = 'WARNING: pyplusplus found std::vector instantiation declaration, ' + msg = 'WARNING: pyplusplus found "%s" instantiation declaration, ' % container_cls.name msg = msg + 'but can not find out value type!' msg = msg + os.linesep + 'This class will not be exported!' - msg = msg + os.linesep + 'std::vector instantiation is: ' + vector.decl_string _logging_.logger.warn( msg ) - return False + return False + + self.__containers.add( container_cls ) + return True + def _update_db( self, db, type_ ): if self._update_containers_db( type_ ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-27 05:51:16
|
Revision: 252 Author: roman_yakovenko Date: 2006-06-26 22:51:08 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=252&view=rev Log Message: ----------- adding support for all std containers Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/container_traits.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-26 20:06:20 UTC (rev 251) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-27 05:51:08 UTC (rev 252) @@ -151,16 +151,22 @@ from type_traits import smart_pointer_traits - + +from container_traits import list_traits +from container_traits import deque_traits +from container_traits import queue_traits +from container_traits import priority_queue from container_traits import vector_traits -from container_traits import list_traits -from container_traits import map_traits -from container_traits import multimap_traits -from container_traits import hash_map_traits +from container_traits import stack_traits +from container_traits import map_traits +from container_traits import multimap_traits +from container_traits import hash_map_traits from container_traits import hash_multimap_traits - +from container_traits import set_traits +from container_traits import hash_set_traits +from container_traits import multiset_traits +from container_traits import hash_multiset_traits - import templates import call_invocation Modified: pygccxml_dev/pygccxml/declarations/container_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/container_traits.py 2006-06-26 20:06:20 UTC (rev 251) +++ pygccxml_dev/pygccxml/declarations/container_traits.py 2006-06-27 05:51:08 UTC (rev 252) @@ -81,9 +81,29 @@ return xxx_traits +list_traits = create_traits_class( 'list', 0 ) + +deque_traits = create_traits_class( 'deque', 0 ) + +queue_traits = create_traits_class( 'queue', 0 ) +priority_queue = create_traits_class( 'priority_queue', 0 ) + vector_traits = create_traits_class( 'vector', 0 ) -list_traits = create_traits_class( 'list', 0 ) + +stack_traits = create_traits_class( 'stack', 0 ) + map_traits = create_traits_class( 'map', 1 ) multimap_traits = create_traits_class( 'multimap', 1 ) + hash_map_traits = create_traits_class( 'hash_map', 1 ) -hash_multimap_traits = create_traits_class( 'hash_multimap', 1 ) \ No newline at end of file +hash_multimap_traits = create_traits_class( 'hash_multimap', 1 ) + +set_traits = create_traits_class( 'set', 0 ) +hash_set_traits = create_traits_class( 'hash_set', 0 ) + +multiset_traits = create_traits_class( 'multiset', 0 ) +hash_multiset_traits = create_traits_class( 'hash_multiset', 0 ) + + + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-26 20:06:32
|
Revision: 251 Author: roman_yakovenko Date: 2006-06-26 13:06:20 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=251&view=rev Log Message: ----------- addinig initial support for indexing suite v2 Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/pyplusplus/module_creator/types_database.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-26 20:06:20 UTC (rev 251) @@ -105,5 +105,4 @@ from array_1_registrator import array_1_registrator_t -from indexing_suites import vector_indexing_suite_t -from indexing_suites import map_indexing_suite_t \ No newline at end of file +from indexing_suites import indexing_suite_t Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2006-06-26 20:06:20 UTC (rev 251) @@ -10,10 +10,9 @@ from pygccxml import declarations class indexing_suite_t( code_creator.code_creator_t ): - def __init__(self, suite_name, parent=None ): + def __init__(self, parent=None ): code_creator.code_creator_t.__init__( self, parent=parent ) - self.__suite_name = suite_name - + def _get_configuration( self ): return self.parent.declaration.indexing_suite configuration = property( _get_configuration ) @@ -22,8 +21,14 @@ return self.parent.declaration container = property( _get_container ) + def guess_suite_name( self ): + if self.container.name.startswith( 'vector' ): + return 'boost::python::vector_indexing_suite' + else: + return 'boost::python::map_indexing_suite' + def _create_suite_declaration( self ): - suite_identifier = algorithm.create_identifier( self, self.__suite_name ) + suite_identifier = algorithm.create_identifier( self, self.guess_suite_name() ) args = [ self.container.decl_string ] if self.configuration.derived_policies: if self.configuration.no_proxy: @@ -38,27 +43,4 @@ def _create_impl(self): return "def( %s() )" % self._create_suite_declaration() - -class vector_indexing_suite_t( indexing_suite_t ): - """ - Creates boost.python code that needed to export a vector of some class - """ - #class_< std::vector<X> >("XVec") - # .def(vector_indexing_suite<std::vector<X> >()) - #; - - def __init__(self, parent=None ): - indexing_suite_t.__init__( self, 'boost::python::vector_indexing_suite', parent=parent ) - -class map_indexing_suite_t( indexing_suite_t ): - """ - Creates boost.python code that needed to export a vector of some class - """ - #class_< std::vector<X> >("XVec") - # .def(vector_indexing_suite<std::vector<X> >()) - #; - - def __init__(self, parent=None ): - indexing_suite_t.__init__( self, 'boost::python::map_indexing_suite', parent=parent ) - - \ No newline at end of file + \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/decl_wrappers/__init__.py 2006-06-26 20:06:20 UTC (rev 251) @@ -87,7 +87,6 @@ from user_text import class_user_text_t from indexing_suite import indexing_suite_t -from indexing_suite import vector_suite_t class dwfactory_t( declarations.decl_factory_t ): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-06-26 20:06:20 UTC (rev 251) @@ -9,15 +9,19 @@ from pygccxml import declarations import indexing_suite as container_suites - -def guess_indexing_suite( class_ ): - if declarations.vector_traits.is_my_case( class_ ) \ - or declarations.list_traits.is_my_case( class_ ): - return container_suites.vector_suite_t( class_ ) - if declarations.map_traits.is_my_case( class_ ) \ - or declarations.hash_map_traits.is_my_case( class_ ): - return container_suites.map_suite_t( class_ ) +def guess_container_traits( class_ ): + if declarations.vector_traits.is_my_case( class_ ): + return declarations.vector_traits + elif declarations.list_traits.is_my_case( class_ ): + return declarations.list_traits + elif declarations.map_traits.is_my_case( class_ ): + return declarations.map_traits + elif declarations.hash_map_traits.is_my_case( class_ ): + declarations.hash_map_traits + else: + return None + #this will only be exported if indexing suite is not None and only when needed class class_declaration_t(decl_wrapper.decl_wrapper_t, declarations.class_declaration_t): def __init__(self, *arguments, **keywords): @@ -34,7 +38,9 @@ def _get_indexing_suite( self ): if self._indexing_suite is None: - self._indexing_suite = guess_indexing_suite( self ) + container_traits = guess_container_traits( self ) + if container_traits: + self._indexing_suite = container_suites.indexing_suite_t( self, container_traits ) return self._indexing_suite indexing_suite = property( _get_indexing_suite ) @@ -110,7 +116,10 @@ def _get_indexing_suite( self ): if self._indexing_suite is None: - self._indexing_suite = guess_indexing_suite( self ) + container_traits = guess_container_traits( self ) + if container_traits: + self._indexing_suite \ + = container_suites.indexing_suite_t( self, container_traits ) return self._indexing_suite indexing_suite = property( _get_indexing_suite ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite.py 2006-06-26 20:06:20 UTC (rev 251) @@ -17,18 +17,19 @@ # 5. shared_ptr class indexing_suite_t( object ): - def __init__( self, container_class, no_proxy=None, derived_policies=None ): + def __init__( self, container_class, container_traits, no_proxy=None, derived_policies=None ): object.__init__( self ) self.__no_proxy = no_proxy self.__derived_policies = None self.__container_class = container_class + self.__container_traits = container_traits def _get_container_class( self ): return self.__container_class container_class = property( _get_container_class ) def value_type(self): - raise NotImplementedError() + return self.__container_traits.value_type( self.container_class ) def _get_no_proxy( self ): if self.__no_proxy is None: @@ -50,27 +51,7 @@ def _get_derived_policies( self ): return self.__derived_policies - def _set_derived_policied( self, derived_policies ): + def _set_derived_policies( self, derived_policies ): self.__derived_policies = derived_policies - derived_policies = property( _get_derived_policies, _set_derived_policied ) - - -class vector_suite_t( indexing_suite_t ): - def __init__( self, cls ): - indexing_suite_t.__init__( self, cls ) - self.__traits = declarations.vector_traits - if declarations.list_traits.is_my_case( self.container_class ): - self.__traits = declarations.list_traits - - def value_type( self ): - return self.__traits.value_type( self.container_class ) - -class map_suite_t( indexing_suite_t ): - def __init__( self, cls ): - indexing_suite_t.__init__( self, cls ) - self.__traits = declarations.map_traits - if declarations.hash_map_traits.is_my_case( self.container_class ): - self.__traits = declarations.hash_map_traits - - def value_type( self ): - return self.__traits.value_type( self.container_class ) + derived_policies = property( _get_derived_policies, _set_derived_policies ) + \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-26 20:06:20 UTC (rev 251) @@ -366,28 +366,32 @@ else: return code_creators.class_declaration_t( class_inst=cls ) - if self.__types_db.used_vectors: - header = "boost/python/suite/indexing/vector_indexing_suite.hpp" - self.__extmodule.add_system_header( header ) - self.__extmodule.add_include( header=header ) - for cls in self.__types_db.used_vectors: - cls_creator = create_cls_cc( cls ) - value_type = cls.indexing_suite.value_type() - if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): - cls_creator.adopt_creator( create_explanation( cls ) ) - cls_creator.adopt_creator( code_creators.vector_indexing_suite_t() ) - self.__module_body.adopt_creator( cls_creator ) - if self.__types_db.used_maps: - header = "boost/python/suite/indexing/map_indexing_suite.hpp" - self.__extmodule.add_system_header( header ) - self.__extmodule.add_include( header=header ) - for cls in self.__types_db.used_maps: - cls_creator = create_cls_cc( cls ) - value_type = cls.indexing_suite.value_type() - if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): - cls_creator.adopt_creator( create_explanation( cls ) ) - cls_creator.adopt_creator( code_creators.map_indexing_suite_t() ) - self.__module_body.adopt_creator( cls_creator ) + if not self.__types_db.used_containers: + return + + map_header_was_used = False + vector_header_was_used = False + + for cls in self.__types_db.used_containers: + if cls.name.startswith( 'vector' ): + if not vector_header_was_used: + vector_header_was_used = True + header = "boost/python/suite/indexing/vector_indexing_suite.hpp" + self.__extmodule.add_system_header( header ) + self.__extmodule.add_include( header=header ) + else: + if not map_header_was_used: + map_header_was_used = True + header = "boost/python/suite/indexing/map_indexing_suite.hpp" + self.__extmodule.add_system_header( header ) + self.__extmodule.add_include( header=header ) + + cls_creator = create_cls_cc( cls ) + value_type = cls.indexing_suite.value_type() + if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): + cls_creator.adopt_creator( create_explanation( cls ) ) + cls_creator.adopt_creator( code_creators.indexing_suite_t() ) + self.__module_body.adopt_creator( cls_creator ) def create(self, decl_headers=None): """Create and return the module for the extension. Modified: pyplusplus_dev/pyplusplus/module_creator/types_database.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-26 20:05:50 UTC (rev 250) +++ pyplusplus_dev/pyplusplus/module_creator/types_database.py 2006-06-26 20:06:20 UTC (rev 251) @@ -18,8 +18,7 @@ self.__smart_ptrs = [ 'shared_ptr', 'auto_ptr' ] self.__fundamental_strs = declarations.FUNDAMENTAL_TYPES.keys() self.__normalize_data = [ ',', '<', '>', '*', '&', '(', ')', '::' ] - self.__used_vectors = set() - self.__used_maps = set() + self.__containers = set() def update( self, decl ): if isinstance( decl, declarations.calldef_t ): @@ -55,29 +54,23 @@ type = declarations.remove_alias( type ) type = declarations.remove_pointer( type ) type = declarations.remove_reference( type ) - try: - if declarations.vector_traits.is_my_case( type ): - vector = declarations.vector_traits.class_declaration( type ) - declarations.vector_traits.value_type( vector ) - self.__used_vectors.add( vector ) - return True - #the patch I submitted should be accepted, before pyplusplus will generate - #the code - #~ if declarations.list_traits.is_my_case( type ): - #~ list_ = declarations.list_traits.class_declaration( type ) - #~ declarations.list_traits.value_type( list_ ) - #~ self.__used_vectors.add( list_ ) - #~ return True - if declarations.map_traits.is_my_case( type ): - map_ = declarations.map_traits.class_declaration( type ) - declarations.map_traits.value_type( map_ ) - self.__used_maps.add( map_ ) - return True - if declarations.hash_map_traits.is_my_case( type ): - map_ = declarations.hash_map_traits.class_declaration( type ) - declarations.hash_map_traits.value_type( map_ ) - self.__used_maps.add( map_ ) - return True + + traits = None + if declarations.vector_traits.is_my_case( type ): + traits = declarations.vector_traits + elif declarations.map_traits.is_my_case( type ): + traits = declarations.map_traits + elif declarations.hash_map_traits.is_my_case( type ): + traits = declarations.hash_map_traits + else: + pass + if None is traits: + return False + try: + cls = traits.class_declaration( type ) + traits.value_type( cls ) + self.__containers.add( cls ) + return True except RuntimeError, error: msg = 'WARNING: pyplusplus found std::vector instantiation declaration, ' msg = msg + 'but can not find out value type!' @@ -180,10 +173,7 @@ for db in dbs: self._print_single_db( db ) - def _get_used_vectors( self ): - return self.__used_vectors - used_vectors = property( _get_used_vectors ) - - def _get_used_maps( self ): - return self.__used_maps - used_maps = property( _get_used_maps ) + def _get_used_containers( self ): + return self.__containers + used_containers = property( _get_used_containers) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-26 20:05:55
|
Revision: 250 Author: roman_yakovenko Date: 2006-06-26 13:05:50 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=250&view=rev Log Message: ----------- fixing bug caused by removing precompiled header code creator Modified Paths: -------------- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-25 18:01:40 UTC (rev 249) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-06-26 20:05:50 UTC (rev 250) @@ -91,15 +91,11 @@ answer = [] if self.extmodule.license: answer.append( self.extmodule.license.create() ) - - if self.extmodule.precompiled_header: - answer.append( self.extmodule.precompiled_header.create() ) - + answer.append( '#include "%s%s"' % ( file_name, self.HEADER_EXT ) ) # Include all 'global' include files... include_creators = filter( lambda creator: isinstance( creator, code_creators.include_t ) - and not isinstance( creator, code_creators.precompiled_header_t ) , self.extmodule.creators ) includes = map( lambda include_creator: include_creator.create() , include_creators ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-25 18:01:46
|
Revision: 249 Author: roman_yakovenko Date: 2006-06-25 11:01:40 -0700 (Sun, 25 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=249&view=rev Log Message: ----------- adding Darren Garnier contribution to the list Modified Paths: -------------- pygccxml_dev/docs/history/history.rest Modified: pygccxml_dev/docs/history/history.rest =================================================================== --- pygccxml_dev/docs/history/history.rest 2006-06-25 10:40:38 UTC (rev 248) +++ pygccxml_dev/docs/history/history.rest 2006-06-25 18:01:40 UTC (rev 249) @@ -15,8 +15,15 @@ * Matthias Baas * Allen Bierbaum * Georgiy Dernovoy + * Darren Garnier ----------- +Development +----------- + +1. `pygccxml`_ has been ported to MacOS X. Many thanks to Darren Garnier! + +----------- Version 0.8 ----------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-25 10:40:50
|
Revision: 248 Author: roman_yakovenko Date: 2006-06-25 03:40:38 -0700 (Sun, 25 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=248&view=rev Log Message: ----------- removing precompiled_header_t code creator Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/include.py pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/unittests/module_properties_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-25 05:33:28 UTC (rev 247) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-06-25 10:40:38 UTC (rev 248) @@ -31,8 +31,7 @@ from module_body import module_body_t -from include import include_t -from include import precompiled_header_t +from include import include_t from unnamed_enum import unnamed_enum_t Modified: pyplusplus_dev/pyplusplus/code_creators/include.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/include.py 2006-06-25 05:33:28 UTC (rev 247) +++ pyplusplus_dev/pyplusplus/code_creators/include.py 2006-06-25 10:40:38 UTC (rev 248) @@ -38,22 +38,3 @@ return '#include <%s>' % normalize_header else: return '#include "%s"' % normalize_header - -class precompiled_header_t(include_t): - """ - Creates C++ code for precompiled header include directive - """ - - def __init__( self, header, parent=None ): - include_t.__init__(self, header, parent) - - def _create_impl(self): - answer = [ include_t._create_impl(self) ] - answer.append( '#ifdef _MSC_VER' ) - answer.append( self.indent( '#pragma hdrstop' ) ) - answer.append( '#endif //_MSC_VER' ) - return os.linesep.join( answer ) - - - - \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2006-06-25 05:33:28 UTC (rev 247) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2006-06-25 10:40:38 UTC (rev 248) @@ -148,34 +148,6 @@ """ self.adopt_creator( include_creator, self.last_include_index() + 1 ) - def _get_precompiled_header(self): - first_include = self.creators[ self.first_include_index() ] - if isinstance( first_include, include.precompiled_header_t ): - return first_include - else: - return None - - def _set_precompiled_header(self, precompiled_header): - assert isinstance( precompiled_header, types.StringTypes ) \ - or isinstance( precompiled_header, include.precompiled_header_t ) - - if not isinstance(precompiled_header, include.precompiled_header_t): - precompiled_header = include.precompiled_header_t( precompiled_header ) - #from here I deal with precompiled_header_t instance - - include_starts = self.first_include_index() - first_include = self.creators[ include_starts ] - if isinstance( first_include, include.precompiled_header_t ): - self.remove_creator( first_include ) - self.adopt_creator( precompiled_header, include_starts ) - - includes = filter( lambda creator: isinstance( creator, include.include_t ) - , self.creators[include_starts+1:] ) - for include_ in includes: - if include_.header == first_include.header: - self.remove_creator( include_ ) - precompiled_header = property( _get_precompiled_header, _set_precompiled_header ) - def do_include_dirs_optimization(self): include_dirs = self._get_include_dirs() includes = filter( lambda creator: isinstance( creator, include.include_t ) Modified: pyplusplus_dev/unittests/module_properties_tester.py =================================================================== --- pyplusplus_dev/unittests/module_properties_tester.py 2006-06-25 05:33:28 UTC (rev 247) +++ pyplusplus_dev/unittests/module_properties_tester.py 2006-06-25 10:40:38 UTC (rev 248) @@ -14,16 +14,16 @@ def __init__(self, *args ): unittest.TestCase.__init__(self, *args) - def test_precompiled_header(self): - extmodule = module_creator.create( [], 'X' ) - self.failUnless( not extmodule.precompiled_header ) - extmodule.precompiled_header = 'boost/python.hpp' - self.failUnless( isinstance( extmodule.precompiled_header - , code_creators.precompiled_header_t ) ) - extmodule.precompiled_header \ - = code_creators.precompiled_header_t( 'boost/date_time.hpp' ) - self.failUnless( isinstance( extmodule.precompiled_header - , code_creators.precompiled_header_t ) ) + #~ def test_precompiled_header(self): + #~ extmodule = module_creator.create( [], 'X' ) + #~ self.failUnless( not extmodule.precompiled_header ) + #~ extmodule.precompiled_header = 'boost/python.hpp' + #~ self.failUnless( isinstance( extmodule.precompiled_header + #~ , code_creators.precompiled_header_t ) ) + #~ extmodule.precompiled_header \ + #~ = code_creators.precompiled_header_t( 'boost/date_time.hpp' ) + #~ self.failUnless( isinstance( extmodule.precompiled_header + #~ , code_creators.precompiled_header_t ) ) def create_suite(): suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-25 05:33:34
|
Revision: 247 Author: roman_yakovenko Date: 2006-06-24 22:33:28 -0700 (Sat, 24 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=247&view=rev Log Message: ----------- removing unnecessary cache flushing ( fix from Allen ) Modified Paths: -------------- pygccxml_dev/pygccxml/parser/declarations_cache.py Modified: pygccxml_dev/pygccxml/parser/declarations_cache.py =================================================================== --- pygccxml_dev/pygccxml/parser/declarations_cache.py 2006-06-24 21:06:52 UTC (rev 246) +++ pygccxml_dev/pygccxml/parser/declarations_cache.py 2006-06-25 05:33:28 UTC (rev 247) @@ -137,7 +137,7 @@ cache_base_t.__init__( self ) self.__name = name self.__cache = self.__load( self.__name ) - self.__needs_flushed = bool( self.__cache ) # If empty then we need to flush + self.__needs_flushed = not bool( self.__cache ) # If empty then we need to flush for entry in self.__cache.itervalues(): # Clear hit flags entry.was_hit = False This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-24 21:06:58
|
Revision: 246 Author: roman_yakovenko Date: 2006-06-24 14:06:52 -0700 (Sat, 24 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=246&view=rev Log Message: ----------- porting to MacOS - patches from dtgarnier Modified Paths: -------------- pygccxml_dev/pygccxml/parser/source_reader.py Modified: pygccxml_dev/pygccxml/parser/source_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/source_reader.py 2006-06-24 19:03:11 UTC (rev 245) +++ pygccxml_dev/pygccxml/parser/source_reader.py 2006-06-24 21:06:52 UTC (rev 246) @@ -90,7 +90,7 @@ if sys.platform == 'win32': gccxml_name = 'gccxml' + '.exe' environment_var_delimiter = ';' - elif sys.platform == 'linux2': + elif sys.platform == 'linux2' or sys.platform == 'darwin': gccxml_name = 'gccxml' environment_var_delimiter = ':' else: @@ -123,7 +123,7 @@ #returns cmd = [] #first is gccxml executable - if 'win' in sys.platform: + if 'win32' in sys.platform: cmd.append( '"%s"' % os.path.normpath( self.__config.gccxml_path ) ) else: cmd.append( '%s' % os.path.normpath( self.__config.gccxml_path ) ) @@ -140,7 +140,7 @@ cmd.append( '-fxml-start="%s"' % ','.join( self.__config.start_with_declarations ) ) cmd_line = ' '.join(cmd) - if 'win' in sys.platform : + if 'win32' in sys.platform : cmd_line = '"%s"' % cmd_line logger.debug( 'gccxml cmd: %s' % cmd_line ) return cmd_line This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-24 19:03:20
|
Revision: 245 Author: roman_yakovenko Date: 2006-06-24 12:03:11 -0700 (Sat, 24 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=245&view=rev Log Message: ----------- adding Python-OGRE Modified Paths: -------------- pyplusplus_dev/docs/quotes.rest Modified: pyplusplus_dev/docs/quotes.rest =================================================================== --- pyplusplus_dev/docs/quotes.rest 2006-06-22 20:10:16 UTC (rev 244) +++ pyplusplus_dev/docs/quotes.rest 2006-06-24 19:03:11 UTC (rev 245) @@ -24,15 +24,30 @@ Allen Bierbaum, the author of `PyOpenSG`_ library +"... This rule based approach is amazing for maintenance, as it reduces the +turnaround for binding new code. If the new Ogre API's follow similar rules and +standards as previously defined, the same set of rules will appropriately bind +the new API without any effort on the part of the maintainers. " + +" ... In general, I've really liked working with pyplusplus. I've probably spent +20-30 hours working on these bindings, and they are very close to being equivalent +to the PyOgre bindings (when I last used them). " + + Lakin Wecker, the author of `Python-OGRE`_ project + ------------------------ Who is using pyplusplus? ------------------------ * Matthias Baas, the author of `Python Computer Graphics Kit`_ project, is using `pyplusplus`_ to create Python bindings for `Maya C++ SDK`__. - + .. __ : http://www.highend3d.com/maya + +* Lakin Wecker, the author of `Python-OGRE`_ project, is using `pyplusplus`_ to + create Python bindings for `OGRE`_. + * I am :-). I created Python bindings for next libraries: @@ -52,7 +67,8 @@ .. _`Python Computer Graphics Kit` : http://cgkit.sourceforge.net/ .. _`TnFOX`: http://www.nedprod.com/TnFOX/ .. _`PyOpenSG`: https://realityforge.vrsource.org/view/PyOpenSG/WebHome - +.. _`Python-OGRE` : http://lakin.weckers.net/index_ogre_python.html +.. _`OGRE` : http://www.ogre3d.org/index.php?option=com_content&task=view&id=19&Itemid=79 .. Local Variables: mode: indented-text This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-22 20:10:24
|
Revision: 244 Author: roman_yakovenko Date: 2006-06-22 13:10:16 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=244&view=rev Log Message: ----------- disable indexing suite Modified Paths: -------------- pyplusplus_dev/pyplusplus/module_builder/builder.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/module_builder/builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-06-21 22:00:14 UTC (rev 243) +++ pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-06-22 20:10:16 UTC (rev 244) @@ -163,7 +163,8 @@ , create_castinig_constructor=True , call_policies_resolver_=None , types_db=None - , target_configuration=None ): + , target_configuration=None + , enable_indexing_suite=True): """ Creates L{module_t} code creator. @@ -184,7 +185,8 @@ , create_castinig_constructor , call_policies_resolver_ , types_db - , target_configuration ) + , target_configuration + , enable_indexing_suite) self.__code_creator = creator.create() #I think I should ask users, what they expect #self.__code_creator.user_defined_directories.append( self.__working_dir ) Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-21 22:00:14 UTC (rev 243) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-22 20:10:16 UTC (rev 244) @@ -48,7 +48,8 @@ , create_castinig_constructor=False , call_policies_resolver_=None , types_db=None - , target_configuration=None ): + , target_configuration=None + , enable_indexing_suite=True): """Constructor. @param decls: Declarations that should be exposed in the final module. @@ -68,6 +69,7 @@ """ declarations.decl_visitor_t.__init__(self) + self.__enable_indexing_suite = enable_indexing_suite self.__target_configuration = target_configuration if not self.__target_configuration: self.__target_configuration = code_creators.target_configuration_t() @@ -407,7 +409,8 @@ for operator in self.__free_operators: self._adopt_free_operator( operator ) self._treat_smart_pointers() - self._treat_indexing_suite() + if self.__enable_indexing_suite: + self._treat_indexing_suite() for creator in code_creators.make_flatten( self.__extmodule ): creator.target_configuration = self.__target_configuration #last action. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-21 22:00:20
|
Revision: 243 Author: roman_yakovenko Date: 2006-06-21 15:00:14 -0700 (Wed, 21 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=243&view=rev Log Message: ----------- adding warning to indexing suite generated file Modified Paths: -------------- pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-21 21:57:30 UTC (rev 242) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-06-21 22:00:14 UTC (rev 243) @@ -353,6 +353,11 @@ pass def _treat_indexing_suite( self ): + def create_explanation(cls): + msg = '//WARNING: the next line of code will not compile, because "%s" does not have operator== !' + msg = msg % cls.indexing_suite.value_type().decl_string + return code_creators.custom_text_t( msg ) + def create_cls_cc( cls ): if isinstance( cls, declarations.class_t ): return code_creators.class_t( class_inst=cls ) @@ -365,6 +370,9 @@ self.__extmodule.add_include( header=header ) for cls in self.__types_db.used_vectors: cls_creator = create_cls_cc( cls ) + value_type = cls.indexing_suite.value_type() + if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): + cls_creator.adopt_creator( create_explanation( cls ) ) cls_creator.adopt_creator( code_creators.vector_indexing_suite_t() ) self.__module_body.adopt_creator( cls_creator ) if self.__types_db.used_maps: @@ -373,6 +381,9 @@ self.__extmodule.add_include( header=header ) for cls in self.__types_db.used_maps: cls_creator = create_cls_cc( cls ) + value_type = cls.indexing_suite.value_type() + if declarations.is_class( value_type ) and not declarations.has_public_equal( value_type ): + cls_creator.adopt_creator( create_explanation( cls ) ) cls_creator.adopt_creator( code_creators.map_indexing_suite_t() ) self.__module_body.adopt_creator( cls_creator ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-06-21 21:57:37
|
Revision: 242 Author: roman_yakovenko Date: 2006-06-21 14:57:30 -0700 (Wed, 21 Jun 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=242&view=rev Log Message: ----------- adding is_class and has_public_equal type traits Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/type_traits.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-21 19:50:27 UTC (rev 241) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2006-06-21 21:57:30 UTC (rev 242) @@ -109,6 +109,7 @@ from type_traits import is_same from type_traits import is_void from type_traits import is_void_pointer +from type_traits import is_class from type_traits import is_const from type_traits import base_type from type_traits import is_array @@ -140,6 +141,7 @@ from type_traits import has_destructor from type_traits import has_trivial_copy +from type_traits import has_public_equal from type_traits import has_public_assign from type_traits import has_public_destructor from type_traits import has_public_constructor Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-21 19:50:27 UTC (rev 241) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-21 21:57:30 UTC (rev 242) @@ -280,9 +280,8 @@ nake_type = remove_alias( type ) nake_type = remove_reference( nake_type ) nake_type = remove_cv( nake_type ) - - return isinstance( nake_type, cpptypes.declarated_t ) \ - and isinstance( nake_type.declaration, class_declaration.class_t ) + nake_type = remove_declarated( nake_type ) + return isinstance( nake_type, class_declaration.class_t) def find_trivial_constructor( type ): """returns reference to trivial constructor or None""" @@ -358,6 +357,32 @@ , type.public_members ) return bool( constructors ) +def has_public_equal( type ): + """returns True if class has public operator==, otherwise False""" + not_artificial = lambda decl: decl.is_artificial == False + type = remove_alias( type ) + type = remove_cv( type ) + type = remove_declarated( type ) + assert isinstance( type, class_declaration.class_t ) + equals = type.member_operators( function=not_artificial, symbol='==', allow_empty=True, recursive=False ) + if equals: + return True + + t = cpptypes.declarated_t( type ) + t = cpptypes.const_t( t ) + t = cpptypes.reference_t( t ) + equals = type.parent.operators( function=not_artificial, symbol='==', arg_types=[t, None], allow_empty=True, recursive=False ) + if equals: + return True + for bi in type.recursive_bases: + assert isinstance( bi, class_declaration.hierarchy_info_t ) + if bi.access_type != class_declaration.ACCESS_TYPES.PUBLIC: + continue + equals = bi.related_class.member_operators( function=not_artificial, symbol='==', allow_empty=True, recursive=False ) + if equals: + return True + return False + def is_unary_operator( oper ): """returns True if operator is unary operator, otherwise False""" #~ definition: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |