Revision: 337
Author: roman_yakovenko
Date: 2006-07-23 12:58:46 -0700 (Sun, 23 Jul 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=337&view=rev
Log Message:
-----------
adding new functionality for class_multiple_writers.py
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py
Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-07-23 18:50:43 UTC (rev 336)
+++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-07-23 19:58:46 UTC (rev 337)
@@ -42,14 +42,16 @@
return True
return bool( filter( lambda cc: not cc.works_on_instance, self.creators ) )
+ @property
+ def typedef_name( self ):
+ return self.class_var_name + '_t'
def _generate_code_with_scope(self):
result = []
scope_var_name = self.alias + '_scope'
- typedef_name = self.class_var_name + '_t'
- result.append( 'typedef ' + self._generate_class_definition() + ' ' + typedef_name + ';')
- result.append( typedef_name + ' ' + self.class_var_name )
- result[-1] = result[-1] + ' = '+ typedef_name + '("%s");' % self.declaration.alias
+ result.append( 'typedef ' + self._generate_class_definition() + ' ' + self.typedef_name + ';')
+ result.append( self.typedef_name + ' ' + self.class_var_name )
+ result[-1] = result[-1] + ' = '+ self.typedef_name + '("%s");' % self.declaration.alias
result.append( algorithm.create_identifier( self, '::boost::python::scope' ) )
result[-1] = result[-1] + ' ' + scope_var_name
@@ -241,17 +243,25 @@
def _get_class_var_name(self):
return self.alias + '_exposer'
class_var_name = property( _get_class_var_name )
+
+ @property
+ def typedef_name( self ):
+ return self.class_var_name + '_t'
+ def create_typedef_code( self ):
+ base_classes, base_creators = self._exported_base_classes()
+ return 'typedef ' + self._generate_class_definition(base_creators) + ' ' + self.typedef_name + ';'
+
+
def _generate_code_with_scope(self):
result = []
scope_var_name = self.alias + '_scope'
- typedef_name = self.class_var_name + '_t'
base_classes, base_creators = self._exported_base_classes()
- result.append( 'typedef ' + self._generate_class_definition(base_creators) + ' ' + typedef_name + ';')
- result.append( typedef_name + ' ' + self.class_var_name )
+ result.append( 'typedef ' + self._generate_class_definition(base_creators) + ' ' + self.typedef_name + ';')
+ result.append( self.typedef_name + ' ' + self.class_var_name )
result[-1] = result[-1] + ' = '
class_constructor, used_init = self._generate_constructor()
- result[-1] = result[-1] + typedef_name + class_constructor
+ result[-1] = result[-1] + self.typedef_name + class_constructor
result[-1] = result[-1] + ';'
result.append( algorithm.create_identifier( self, '::boost::python::scope' ) )
Modified: pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2006-07-23 18:50:43 UTC (rev 336)
+++ pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2006-07-23 19:58:46 UTC (rev 337)
@@ -67,13 +67,40 @@
self.split_header_names.append(header_name)
self.split_method_names.append(function_name)
- def write_wrapper( self, class_creator ):
- code = ''
+ def write_wrapper( self, class_creator ):
+ answer = []
+ if self.extmodule.license:
+ answer.append( self.extmodule.license.create() )
+
+ # Include all 'global' include files...
+ include_creators = filter( lambda creator: isinstance( creator, code_creators.include_t )
+ , self.extmodule.creators )
+ includes = map( lambda include_creator: include_creator.create()
+ , include_creators )
+
+ # Write all 'global' namespace_alias_t and namespace_using_t creators first...
+ affect_creators = filter( lambda x: isinstance( x, code_creators.namespace_alias_t )
+ or isinstance( x, code_creators.namespace_using_t )
+ , self.extmodule.creators )
+
+ affect_creators.extend( filter( lambda x: isinstance( x, code_creators.namespace_alias_t )
+ or isinstance( x, code_creators.namespace_using_t )
+ , self.extmodule.body.creators ) )
+
+ namespace_aliases = map( lambda creator: creator.create(), affect_creators )
+ if namespace_aliases:
+ answer.append( '' )
+ answer.append( os.linesep.join(namespace_aliases) )
+
if class_creator.wrapper:
- code = class_creator.wrapper.create()
- class_creator.wrapper.create = lambda: ''
+ answer.append( class_creator.wrapper.create() )
+ class_creator.wrapper.create = lambda: ''
+
+ answer.append( '' )
+ answer.append( class_creator.create_typedef_code() )
- wrapper_code = self.create_header( class_creator.alias + '_wrapper', code )
+ code = os.linesep.join( answer )
+ wrapper_code = self.create_header( class_creator.alias + '_wrapper', code )
header_file = os.path.join( self.directory_path, class_creator.alias, 'wrapper' + self.HEADER_EXT )
self.write_file( header_file, wrapper_code )
@@ -132,9 +159,10 @@
def split_class_impl( self, class_creator):
if not class_creator.declaration in self.huge_classes:
return super( class_multiple_files_t, self ).split_class_impl( class_creator )
-
+
+ class_creator.declaration.always_expose_using_scope = True
extmodule = class_creator.top_parent
-
+
self.create_dir( os.path.join( self.directory_path, class_creator.alias ) )
function_name = 'register_%s_class' % class_creator.alias
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|