Revision: 311
Author: roman_yakovenko
Date: 2006-07-18 01:13:37 -0700 (Tue, 18 Jul 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=311&view=rev
Log Message:
-----------
small refactoring. This refactoring should make easier to
introduce new functionality - splitting code of single class
to many files
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-07-18 05:52:30 UTC (rev 310)
+++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-07-18 08:13:37 UTC (rev 311)
@@ -91,7 +91,7 @@
value_class = class_traits.get_declaration( element_type )
return self.create_value_traits_header_name( value_class )
- def create_source( self, file_name, function_name, creators ):
+ def create_source( self, file_name, function_name, registration_creators, declaration_creators=None ):
"""Return the content of a cpp file.
@param file_name: The base name of the corresponding include file (without extension)
@@ -103,6 +103,10 @@
@returns: The content for a cpp file
@rtype: str
"""
+
+ if None is declaration_creators:
+ declaration_creators = []
+ creators = registration_creators + declaration_creators
answer = []
if self.extmodule.license:
@@ -110,12 +114,13 @@
answer.append( '#include "%s%s"' % ( file_name, self.HEADER_EXT ) )
- # Include all 'global' include files...
+ # 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 )
- for creator in creators:
+ , include_creators )
+
+ for creator in registration_creators:
value_traits_header = self.find_out_value_traits_header( creator )
if value_traits_header:
includes.append( '#include "%s"' % value_traits_header )
@@ -136,38 +141,43 @@
answer.append( os.linesep.join(namespace_aliases) )
# Write wrapper classes...
- for creator in creators:
- if isinstance( creator, code_creators.class_t ) and creator.wrapper:
- answer.append( '' )
- answer.append( creator.wrapper.create() )
+ for creator in declaration_creators:
+ answer.append( '' )
+ answer.append( creator.create() )
# Write the register() function...
answer.append( '' )
answer.append( 'void %s(){' % function_name )
- for creator in creators:
+ for creator in registration_creators:
answer.append( code_creators.code_creator_t.indent( creator.create() ) )
answer.append( '' )
answer.append( '}' )
return os.linesep.join( answer )
- def __split_class_impl( self, class_creator):
+ def split_class_impl( self, class_creator):
function_name = 'register_%s_class' % class_creator.alias
file_path = os.path.join( self.directory_path, class_creator.alias )
# Write the .h file...
header_name = file_path + self.HEADER_EXT
self.write_file( header_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 isinstance( class_creator, code_creators.class_t ) and class_creator.wrapper:
+ , self.create_function_code( function_name ) ) )
+ class_wrapper = None
+ decl_creators = None
+ if isinstance( class_creator, code_creators.class_t ) and class_creator.wrapper:
+ class_wrapper = class_creator.wrapper
+ decl_creators = [ class_creator.wrapper ]
+ # Write the .cpp file...
+ cpp_code = self.create_source( class_creator.alias
+ , function_name
+ , [class_creator]
+ , decl_creators )
+ self.write_file( file_path + self.SOURCE_EXT, cpp_code )
+ if class_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.
- class_creator.wrapper.create = lambda: ''
+ class_wrapper.create = lambda: ''
# Replace the create() method so that only the register() method is called
# (this is called later for the main source file).
class_creator.create = lambda: function_name +'();'
@@ -185,7 +195,7 @@
@type class_creator: class_t
"""
try:
- self.__split_class_impl( class_creator )
+ self.split_class_impl( class_creator )
except IOError, error:
msg = [ 'Failed to write code for class "%s" into file.' % class_creator.declaration.name ]
msg.append( "May be the class name is too long?." )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|