[pygccxml-commit] SF.net SVN: pygccxml: [771] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-30 18:49:19
|
Revision: 771 http://svn.sourceforge.net/pygccxml/?rev=771&view=rev Author: roman_yakovenko Date: 2006-11-30 10:49:18 -0800 (Thu, 30 Nov 2006) Log Message: ----------- fixing small bug Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py pyplusplus_dev/unittests/function_transformations_tester.py Added Paths: ----------- pyplusplus_dev/unittests/temp/named_tuple.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2006-11-30 13:56:21 UTC (rev 770) +++ pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2006-11-30 18:49:18 UTC (rev 771) @@ -253,20 +253,17 @@ def controller( self ): return self.ft.controller + @property + def function_type_alias( self ): + return 'default_' + self.alias + '_function_type' + def _get_alias_impl( self ): return self.wrapper.ft.alias def create_function_type_alias_code( self, exported_class_alias=None ): - result = [] + ftype = self.wrapper.default_function_type() + return 'typedef %s;' % ftype.create_typedef( self.function_type_alias ) - ftype = self.declaration.function_type() - result.append( 'typedef %s;' % ftype.create_typedef( self.function_type_alias, exported_class_alias ) ) - if self.wrapper: - result.append( os.linesep ) - ftype = self.wrapper.function_type() - result.append( 'typedef %s;' % ftype.create_typedef( self.default_function_type_alias ) ) - return ''.join( result ) - def create_keywords_args(self): cntrl = self.controller.default_controller arg_utils = calldef_utils.argument_utils_t( self.declaration Modified: pyplusplus_dev/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev/unittests/function_transformations_tester.py 2006-11-30 13:56:21 UTC (rev 770) +++ pyplusplus_dev/unittests/function_transformations_tester.py 2006-11-30 18:49:18 UTC (rev 771) @@ -48,6 +48,7 @@ point3d.mem_fun( 'distance' ).add_transformation( ft.output(1) ) image = mb.class_( "image_t" ) + image.always_expose_using_scope = True image.member_function( "get_size" ) image.member_function( "get_size" ).add_transformation( ft.output(0), ft.output(1) ) image.member_function( "get_one_value" ).add_transformation( ft.output(0) ) Added: pyplusplus_dev/unittests/temp/named_tuple.py =================================================================== --- pyplusplus_dev/unittests/temp/named_tuple.py (rev 0) +++ pyplusplus_dev/unittests/temp/named_tuple.py 2006-11-30 18:49:18 UTC (rev 771) @@ -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) + +class named_tuple(tuple): + """Creates tuple, which allows access to stored values by name and by index. + + named_tuple could be constructed exactly in the same way as Python dict. + """ + + def __new__(cls, seq=None, **keywd): + if seq: + if isinstance( seq, dict ): + return tuple.__new__( cls, seq.values() ) + else: + return tuple.__new__( cls, [ val for name, val in seq] ) + else: + return tuple.__new__( cls, keywd.values() ) + + def __init__(self, seq=None, **keywd): + "named_tuple could be constructed exactly in the same way as Python dict." + tuple.__init__( self ) + if seq: + if isinstance( seq, dict ): + name2value = dict( seq.iteritems() ) + else: + name2value = dict( seq ) + else: + name2value = dict( keywd ) + self.__dict__[ '__name2value' ] = name2value + + def __getattr__(self, name): + try: + return self.__dict__['__name2value'][ name ] + except KeyError: + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __setattr__(self, name, value): + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __getitem__( self, key ): + #TODO: it could be nice to support slicing. So the __getitem__ in case of + #slicing will return new named_tuple. + if isinstance( key, basestring ): + return self.__dict__['__name2value'][ key ] + else: + return super( named_tuple, self ).__getitem__( key ) + +if __name__ == '__main__': + nt = named_tuple( a=0, b=1) + assert nt.a == 0 and nt.b == 1 + a,b = nt + assert a == 0 and b == 1 + assert nt[ "a" ] == 0 and nt[ "b" ] == 1 + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |