pygccxml-commit Mailing List for C++ Python language bindings (Page 5)
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...> - 2009-09-19 18:57:56
|
Revision: 1757 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1757&view=rev Author: roman_yakovenko Date: 2009-09-19 18:57:48 +0000 (Sat, 19 Sep 2009) Log Message: ----------- fixing generated call policies for transformed virtual function. Thanks to Pertti Kellom?\195?\164ki for reporting it. Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp pyplusplus_dev/unittests/function_transformations_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2009-09-19 18:57:48 UTC (rev 1757) @@ -281,6 +281,9 @@ else: return '&%s' % full_name + def create_call_policies( self ): + return '' + class mem_fun_v_transformed_wrapper_t( calldef_wrapper_t ): def __init__( self, function ): calldef_wrapper_t.__init__( self, function=function ) Modified: pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2009-09-19 18:57:48 UTC (rev 1757) @@ -254,4 +254,26 @@ } +namespace ft_bugs{ + +class C {}; + +class A { +public: + + static const A& get_a(){ static A a; return a; } + +protected: + virtual ~A(){}; +}; + +class B { +public: + virtual C* h(A const & x){ return 0;} // this does not work + //C *h(A const & x); // this works + //virtual C *h(); // and this +}; + +} + #endif//__function_transformations_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev/unittests/function_transformations_tester.py 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/unittests/function_transformations_tester.py 2009-09-19 18:57:48 UTC (rev 1757) @@ -13,6 +13,14 @@ from pyplusplus.module_builder import call_policies +def remove_const_ref(type): + """Converts "T const&" into "T &" """ + if declarations.type_traits.is_reference(type): + t = declarations.cpptypes.reference_t(declarations.type_traits.remove_const(type.base)) + return t + return type + + class tester_t(fundamental_tester_base.fundamental_tester_base_t): EXTENSION_NAME = 'function_transformations' @@ -94,6 +102,14 @@ render_queue_listener_t = mb.class_( 'render_queue_listener_t' ) render_queue_ended = render_queue_listener_t.mem_fun( 'render_queue_ended' ) render_queue_ended.add_transformation( ft.inout(2) ) + + ft_bugs = mb.namespace( 'ft_bugs' ) + h = ft_bugs.mem_fun( 'h' ) + h.add_transformation( ft.modify_type(0, remove_const_ref ) ) + h.call_policies = call_policies.return_internal_reference() + ft_bugs.class_( 'B' ).always_expose_using_scope = True + ft_bugs.mem_fun( 'get_a' ).call_policies \ + = call_policies.return_value_policy( call_policies.reference_existing_object ) def run_tests(self, module): """Run the actual unit tests. @@ -252,7 +268,9 @@ tmp = module.transfer_ownership_tester_t() resource = tmp.resources_t(); tmp.tester( resource ) - + + b = module.B() + self.failUnless( b.h( module.A.get_a() ) == None ) def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-24 19:55:22
|
Revision: 1756 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1756&view=rev Author: roman_yakovenko Date: 2009-08-24 19:55:14 +0000 (Mon, 24 Aug 2009) Log Message: ----------- adding ability to override virtual protected member functions from Python Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp pyplusplus_dev/unittests/function_adaptor_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-18 18:02:47 UTC (rev 1755) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-24 19:55:14 UTC (rev 1756) @@ -332,7 +332,7 @@ if hasattr( self.declaration, 'adaptor' ) and self.declaration.adaptor: result = "%s( %s )" % ( self.declaration.adaptor, result ) - + return result class mem_fun_pv_wrapper_t( calldef_wrapper_t ): @@ -530,7 +530,7 @@ def _create_impl(self): answer = [ self.create_function() ] - answer.append( os.linesep ) + answer.append( '' ) answer.append( self.create_default_function() ) return os.linesep.join( answer ) @@ -681,12 +681,12 @@ def create_function_ref_code(self, use_function_alias=False): if use_function_alias: return '%s( &%s )' \ - % ( self.function_type_alias, self.wrapper.full_name() ) + % ( self.function_type_alias, self.wrapper.default_full_name() ) elif self.declaration.create_with_signature: return '(%s)(&%s)' \ - % ( self.wrapper.function_type().partial_decl_string, self.wrapper.full_name() ) + % ( self.wrapper.function_type().partial_decl_string, self.wrapper.default_full_name() ) else: - return '&%s' % self.wrapper.full_name() + return '&%s' % self.wrapper.default_full_name() class mem_fun_protected_v_wrapper_t( calldef_wrapper_t ): def __init__( self, function): @@ -695,6 +695,9 @@ def full_name(self): return self.parent.full_name + '::' + self.declaration.name + def default_full_name(self): + return self.parent.full_name + '::default_' + self.declaration.alias + def function_type(self): return declarations.member_function_type_t( return_type=self.declaration.return_type @@ -729,7 +732,7 @@ template.append( 'else{' ) native_precall_code = self.declaration.override_native_precall_code if native_precall_code: - template.append( self.indent( os.linesep.join( native_precall_code ) ) ) + template.append( self.indent( os.linesep.join( native_precall_code ) ) ) template.append( self.indent('%(return_)sthis->%(wrapped_class)s::%(name)s( %(args)s );') ) template.append( '}' ) template = os.linesep.join( template ) @@ -753,9 +756,31 @@ answer.append( '}' ) return os.linesep.join( answer ) + + def create_default_body(self): + function_call = declarations.call_invocation.join( self.declaration.partial_name + , [ self.function_call_args() ] ) + body = self.wrapped_class_identifier() + '::' + function_call + ';' + if not declarations.is_void( self.declaration.return_type ): + body = 'return ' + body + precall_code = self.declaration.default_precall_code + if precall_code: + body = os.linesep.join( precall_code ) + os.linesep + body + return body + + def create_default_function( self ): + answer = [ self.create_declaration('default_' + self.declaration.alias) + '{' ] + answer.append( self.indent( self.create_default_body() ) ) + answer.append( '}' ) + return os.linesep.join( answer ) + def _create_impl(self): - return self.create_function() + answer = [ self.create_function() ] + answer.append( '' ) + answer.append( self.create_default_function() ) + return os.linesep.join( answer ) + class mem_fun_protected_pv_t( calldef_t ): def __init__( self, function, wrapper ): calldef_t.__init__( self, function=function, wrapper=wrapper ) @@ -1035,7 +1060,7 @@ def __init__( self, constructor ): code_creator.code_creator_t.__init__( self ) declaration_based.declaration_based_t.__init__( self, declaration=constructor ) - + @property def parent_class( self ): return self.declaration.parent @@ -1080,11 +1105,11 @@ def __init__( self, constructor ): code_creator.code_creator_t.__init__( self ) declaration_based.declaration_based_t.__init__( self, declaration=constructor ) - + @property def parent_class( self ): return self.declaration.parent - + def _create_constructor_call( self ): return algorithm.create_identifier( self, self.parent_class.decl_string ) + '()' Modified: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-18 18:02:47 UTC (rev 1755) +++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-24 19:55:14 UTC (rev 1756) @@ -42,5 +42,24 @@ }; +class Foo +{ +public: + Foo() { } + virtual ~Foo() { } +public: + virtual int virtual_public() + { + return 1; + } + int call_virtual_protected(){ + return virtual_protected(); + } +protected: + virtual int virtual_protected() + { + return 2; + } +}; #endif//__function_adaptor_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_adaptor_tester.py =================================================================== --- pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-18 18:02:47 UTC (rev 1755) +++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-24 19:55:14 UTC (rev 1756) @@ -30,7 +30,31 @@ mfuns.add_override_native_precall_code( '//add_override_native_precall_code' ) mb.class_('base3_t' ).add_wrapper_code( '//just a comment to force Py++ create wrapper' ) mb.mem_fun( '::derived_t::get_two' ).alias = 'get2' + Foo = mb.class_('Foo') + for f in [ 'virtual_public', 'virtual_protected' ]: + f = Foo.mem_fun( f ) + f.add_default_precall_code( '//add_default_precall_code' ) + f.add_override_precall_code( '//add_override_precall_code' ) + f.add_override_native_precall_code( '//add_override_native_precall_code' ) + def create_foo_derived(self, module): + class pyfoo( module.Foo ): + def __init__( self ): + module.Foo.__init__( self ) + + def virtual_protected( self ): + return 3 + return pyfoo( ); + + def create_foo_derived2(self, module): + class pyfoo2( module.Foo ): + def __init__( self ): + module.Foo.__init__( self ) + + def virtual_protected( self ): + return module.Foo.virtual_protected( self ) + return pyfoo2( ); + def run_tests( self, module): foo = module.foo_t() self.failUnless( foo.get_zero() == 0 ) @@ -38,6 +62,16 @@ self.failUnless( module.foo_t.get_two() == 2 ) self.failUnless( module.get_one() == 1 ) + pyfoo = self.create_foo_derived( module ) + self.failUnless( pyfoo.virtual_public() == 1 ) + self.failUnless( pyfoo.virtual_protected() == 3 ) + self.failUnless( pyfoo.call_virtual_protected() == 3 ) + + pyfoo2 = self.create_foo_derived2( module ) + self.failUnless( pyfoo2.virtual_public() == 1 ) + self.failUnless( pyfoo2.virtual_protected() == 2 ) + self.failUnless( pyfoo2.call_virtual_protected() == 2 ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-18 18:03:03
|
Revision: 1755 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1755&view=rev Author: roman_yakovenko Date: 2009-08-18 18:02:47 +0000 (Tue, 18 Aug 2009) Log Message: ----------- adding adaptor for pure virtual member functions Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp pyplusplus_dev/unittests/function_adaptor_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-17 19:29:29 UTC (rev 1754) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-18 18:02:47 UTC (rev 1755) @@ -315,20 +315,26 @@ return 'typedef %s;' % ftype.create_typedef( self.function_type_alias, exported_class_alias ) def create_function_ref_code(self, use_function_alias=False): + result = '' fname = declarations.full_name( self.declaration, with_defaults=False ) if use_function_alias: - return '%s( %s(&%s) )' \ + result = '%s( %s(&%s) )' \ % ( self.pure_virtual_identifier() , self.function_type_alias , fname ) elif self.declaration.create_with_signature: - return '%s( (%s)(&%s) )' \ + result = '%s( (%s)(&%s) )' \ % ( self.pure_virtual_identifier() , self.declaration.function_type().partial_decl_string , fname ) else: - return '%s( &%s )' % ( self.pure_virtual_identifier(), fname) + result = '%s( &%s )' % ( self.pure_virtual_identifier(), fname) + if hasattr( self.declaration, 'adaptor' ) and self.declaration.adaptor: + result = "%s( %s )" % ( self.declaration.adaptor, result ) + + return result + class mem_fun_pv_wrapper_t( calldef_wrapper_t ): def __init__( self, function ): calldef_wrapper_t.__init__( self, function=function ) Modified: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-17 19:29:29 UTC (rev 1754) +++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-18 18:02:47 UTC (rev 1755) @@ -37,5 +37,10 @@ }; +struct base4_t{ + virtual int get_zero() const = 0; +}; + + #endif//__function_adaptor_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_adaptor_tester.py =================================================================== --- pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-17 19:29:29 UTC (rev 1754) +++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-18 18:02:47 UTC (rev 1755) @@ -29,6 +29,7 @@ mfuns.add_override_precall_code( '//add_override_precall_code' ) mfuns.add_override_native_precall_code( '//add_override_native_precall_code' ) mb.class_('base3_t' ).add_wrapper_code( '//just a comment to force Py++ create wrapper' ) + mb.mem_fun( '::derived_t::get_two' ).alias = 'get2' def run_tests( self, module): foo = module.foo_t() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-17 19:29:37
|
Revision: 1754 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1754&view=rev Author: roman_yakovenko Date: 2009-08-17 19:29:29 +0000 (Mon, 17 Aug 2009) Log Message: ----------- adding few properties to make the life of embedded developers easier Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp pyplusplus_dev/unittests/function_adaptor_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -477,8 +477,12 @@ template.append( os.linesep.join( precall_code ) ) template.append( 'if( %(override)s func_%(alias)s = this->get_override( "%(alias)s" ) )' ) template.append( self.indent('%(return_)sfunc_%(alias)s( %(args)s );') ) - template.append( 'else' ) + template.append( 'else{' ) + native_precall_code = self.declaration.override_native_precall_code + if native_precall_code: + template.append( self.indent( os.linesep.join( native_precall_code ) ) ) template.append( self.indent('%(return_)sthis->%(wrapped_class)s::%(name)s( %(args)s );') ) + template.append( '}' ) template = os.linesep.join( template ) return_ = '' @@ -716,8 +720,12 @@ template.append( 'if( %(override)s func_%(alias)s = this->get_override( "%(alias)s" ) )' ) template.append( self.indent('%(return_)sfunc_%(alias)s( %(args)s );') ) - template.append( 'else' ) + template.append( 'else{' ) + native_precall_code = self.declaration.override_native_precall_code + if native_precall_code: + template.append( self.indent( os.linesep.join( native_precall_code ) ) ) template.append( self.indent('%(return_)sthis->%(wrapped_class)s::%(name)s( %(args)s );') ) + template.append( '}' ) template = os.linesep.join( template ) return_ = '' Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -246,6 +246,7 @@ calldef_t.__init__( self ) self._use_overload_macro = False self._override_precall_code = [] + self._overide_native_precall_code = [] self._default_precall_code = [] self._adaptor = None @@ -268,6 +269,15 @@ """code, which should be executed, before overrided member function call""" return self._override_precall_code + def add_override_native_precall_code(self, code): + """add code, which should be executed, before native member function call""" + self._overide_native_precall_code.append( code ) + + @property + def override_native_precall_code(self): + """code, which should be executed, before overrided member function call""" + return self._overide_native_precall_code + def add_default_precall_code(self, code): """add code, which should be executed, before this member function call""" self._default_precall_code.append( code ) @@ -452,7 +462,8 @@ calldef_t.__init__( self ) self._override_precall_code = [] self._default_precall_code = [] - + self._overide_native_precall_code = [] + def add_override_precall_code(self, code): self._override_precall_code.append( code ) @@ -467,6 +478,16 @@ def default_precall_code(self): return self._default_precall_code + def add_override_native_precall_code(self, code): + """add code, which should be executed, before native member function call""" + self._overide_native_precall_code.append( code ) + + @property + def override_native_precall_code(self): + """code, which should be executed, before overrided member function call""" + return self._overide_native_precall_code + + def _get_alias( self): alias = super( member_operator_t, self )._get_alias() if alias == self.name: Modified: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-17 19:29:29 UTC (rev 1754) @@ -18,4 +18,24 @@ inline int get_one(){ return 1; } +struct base_t{ +protected: + virtual int get_zero() const { return 0; } + virtual int get_two() const { return 2; } + +}; + +struct derived_t : public base_t{ +protected: + virtual int get_two() const { return 22; } +}; + + +struct base3_t{ +protected: + virtual int get_zero() const = 0; + +}; + + #endif//__function_adaptor_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_adaptor_tester.py =================================================================== --- pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright 2004-2008 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. (See # accompanying file LICENSE_1_0.txt or copy at @@ -20,8 +21,15 @@ def customize(self, mb ): for suffix in [ 'zero', 'one', 'two' ]: - mb.calldef( 'get_' + suffix ).adaptor = 'PYPP_IDENTITY' - mb.calldef( 'get_' + suffix ).create_with_signature = False + funs = mb.calldefs( 'get_' + suffix ) + funs.adaptor = 'PYPP_IDENTITY' + funs.create_with_signature = False + mfuns = mb.global_ns.mem_funs( 'get_' + suffix, allow_empty=True ) + mfuns.add_default_precall_code( '//add_default_precall_code' ) + mfuns.add_override_precall_code( '//add_override_precall_code' ) + mfuns.add_override_native_precall_code( '//add_override_native_precall_code' ) + mb.class_('base3_t' ).add_wrapper_code( '//just a comment to force Py++ create wrapper' ) + def run_tests( self, module): foo = module.foo_t() self.failUnless( foo.get_zero() == 0 ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-17 19:27:05
|
Revision: 1753 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1753&view=rev Author: roman_yakovenko Date: 2009-08-17 19:26:53 +0000 (Mon, 17 Aug 2009) Log Message: ----------- changing text color Modified Paths: -------------- sphinx/__templates_www/in_text_ads.html Modified: sphinx/__templates_www/in_text_ads.html =================================================================== --- sphinx/__templates_www/in_text_ads.html 2009-08-10 19:08:42 UTC (rev 1752) +++ sphinx/__templates_www/in_text_ads.html 2009-08-17 19:26:53 UTC (rev 1753) @@ -1,7 +1,7 @@ <!-- Kontera ContentLink(TM);--> <script type='text/javascript'> -var dc_AdLinkColor = '#98DBCC' ; -var dc_PublisherID = 109651 ; +var dc_AdLinkColor = '#355F7C' ; +var dc_PublisherID = 109651 ; </script> <script type='text/javascript' src='http://kona.kontera.com/javascript/lib/KonaLibInline.js'> </script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-10 19:08:49
|
Revision: 1752 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1752&view=rev Author: roman_yakovenko Date: 2009-08-10 19:08:42 +0000 (Mon, 10 Aug 2009) Log Message: ----------- fixing site layout issue Modified Paths: -------------- sphinx/__templates_www/layout.html Added Paths: ----------- sphinx/__templates_www/in_text_ads.html Added: sphinx/__templates_www/in_text_ads.html =================================================================== --- sphinx/__templates_www/in_text_ads.html (rev 0) +++ sphinx/__templates_www/in_text_ads.html 2009-08-10 19:08:42 UTC (rev 1752) @@ -0,0 +1,7 @@ +<!-- Kontera ContentLink(TM);--> +<script type='text/javascript'> +var dc_AdLinkColor = '#98DBCC' ; +var dc_PublisherID = 109651 ; +</script> +<script type='text/javascript' src='http://kona.kontera.com/javascript/lib/KonaLibInline.js'> +</script> Modified: sphinx/__templates_www/layout.html =================================================================== --- sphinx/__templates_www/layout.html 2009-08-09 20:39:22 UTC (rev 1751) +++ sphinx/__templates_www/layout.html 2009-08-10 19:08:42 UTC (rev 1752) @@ -21,20 +21,18 @@ {%- endblock %} {%- block document %} - <div class="document"> <div class="documentwrapper"> {%- if not embedded %}{% if not theme_nosidebar|tobool %} <div class="bodywrapper"> {%- endif %}{% endif %} <div class="body"> - {% block body %} {% endblock %} + {% block body %} {% endblock %} + <hr width=60%> {% include "bottom_ad_unit.html" %} + {% include "in_text_ads.html" %} </div> {%- if not embedded %}{% if not theme_nosidebar|tobool %} </div> {%- endif %}{% endif %} </div> - {%- block sidebar2 %}{{ sidebar() }}{% endblock %} - <div class="clearer"></div> - </div> {%- endblock %} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-09 20:39:32
|
Revision: 1751 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1751&view=rev Author: roman_yakovenko Date: 2009-08-09 20:39:22 +0000 (Sun, 09 Aug 2009) Log Message: ----------- adding another example of ctypes code generator usage Added Paths: ----------- pyplusplus_dev/examples/libmemcached_dev/dev/generate_code.py pyplusplus_dev/examples/libmemcached_dev/dev/project_env.py pyplusplus_dev/examples/libmemcached_dev/pymemcached/__init__.py pyplusplus_dev/examples/libmemcached_dev/pymemcached/ctypes_utils.py pyplusplus_dev/examples/libmemcached_dev/pymemcached/exposed_decl.pypp.txt Added: pyplusplus_dev/examples/libmemcached_dev/dev/generate_code.py =================================================================== --- pyplusplus_dev/examples/libmemcached_dev/dev/generate_code.py (rev 0) +++ pyplusplus_dev/examples/libmemcached_dev/dev/generate_code.py 2009-08-09 20:39:22 UTC (rev 1751) @@ -0,0 +1,39 @@ +import os +import sys + +import project_env + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations +from pyplusplus.module_builder import ctypes_module_builder_t + + +gccxml_cfg = parser.gccxml_configuration_t( gccxml_path=project_env.settings.gccxml_path + , include_paths=project_env.libmemcached.include_paths) + +mb = ctypes_module_builder_t( [project_env.libmemcached.header_file] + , project_env.libmemcached.symbols_file, gccxml_cfg ) + +#there is a bug in the code generator +has_varargs = lambda f: f.arguments \ + and isinstance( f.arguments[-1].type, declarations.ellipsis_t ) + +mb.calldefs( has_varargs ).exclude() + +#libmemcached uses strange convention: every function name starts with __gmp and than, it +#introduces define, which aliass __gmpy to gmpy +#for f in mb.calldefs( lambda x: x.name.startswith('__gmp') ): +# f.alias = f.name[2:] + +#for v in mb.vars( lambda x: x.name.startswith( '__gmp' ) ): +# v.alias = v.name[2:] + +#those structs are private implementation of FILE +#mb.class_( '_IO_FILE' ).opaque = True +#mb.class_( '_IO_marker' ).opaque = True + + +mb.build_code_creator( project_env.libmemcached.shared_library_file ) +mb.write_module( os.path.join( project_env.libmemcached.generated_code_dir, '__init__.py' ) ) + Added: pyplusplus_dev/examples/libmemcached_dev/dev/project_env.py =================================================================== --- pyplusplus_dev/examples/libmemcached_dev/dev/project_env.py (rev 0) +++ pyplusplus_dev/examples/libmemcached_dev/dev/project_env.py 2009-08-09 20:39:22 UTC (rev 1751) @@ -0,0 +1,14 @@ +import os +import sys +sys.path.append( os.path.join( '..', '..' ) ) + +from environment import settings, complete_path + +clib_sources = complete_path( 'pyplusplus_dev', 'examples', 'libmemcached_dev', 'libmemcached-0.31' ) + +class libmemcached: + include_paths = [ clib_sources ] + header_file = os.path.join( clib_sources, 'libmemcached/memcached.h' ) + symbols_file = os.path.join( clib_sources, 'libmemcached/.libs/libmemcached.so' ) + shared_library_file = os.path.join( clib_sources, 'libmemcached/.libs/libmemcached.so' ) + generated_code_dir = complete_path( 'pyplusplus_dev', 'examples', 'libmemcached_dev', 'pymemcached' ) Added: pyplusplus_dev/examples/libmemcached_dev/pymemcached/__init__.py =================================================================== --- pyplusplus_dev/examples/libmemcached_dev/pymemcached/__init__.py (rev 0) +++ pyplusplus_dev/examples/libmemcached_dev/pymemcached/__init__.py 2009-08-09 20:39:22 UTC (rev 1751) @@ -0,0 +1,686 @@ +# This file has been generated by Py++. + +import ctypes + +import ctypes_utils + +libmemcached_lib = ctypes.CDLL( r"/home/roman/language-binding/sources/pyplusplus_dev/examples/libmemcached_dev/libmemcached-0.31/libmemcached/.libs/libmemcached.so" ) + +libmemcached_lib.undecorated_names = {#mapping between decorated and undecorated names + "extern memcached_return memcached_decrement(memcached_st * ptr, char const * key, size_t key_length, uint32_t offset, uint64_t * value) [free function]" : "memcached_decrement", + "extern memcached_return memcached_string_reset(memcached_string_st * string) [free function]" : "memcached_string_reset", + "extern uint32_t memcached_generate_hash_value(char const * key, size_t key_length, memcached_hash hash_algorithm) [free function]" : "memcached_generate_hash_value", + "extern memcached_return memcached_decrement_with_initial(memcached_st * ptr, char const * key, size_t key_length, uint64_t offset, uint64_t initial, time_t expiration, uint64_t * value) [free function]" : "memcached_decrement_with_initial", + "extern char * * memcached_stat_get_keys(memcached_st * ptr, memcached_stat_st * stat, memcached_return * error) [free function]" : "memcached_stat_get_keys", + "extern memcached_return memcached_append(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_append", + "extern memcached_return run_distribution(memcached_st * ptr) [free function]" : "run_distribution", + "extern char * memcached_string_c_copy(memcached_string_st * string) [free function]" : "memcached_string_c_copy", + "extern memcached_return memcached_server_add_with_weight(memcached_st * ptr, char const * hostname, unsigned int port, uint32_t weight) [free function]" : "memcached_server_add_with_weight", + "extern memcached_return memcached_dump(memcached_st * ptr, memcached_dump_func * function, void * context, uint32_t number_of_callbacks) [free function]" : "memcached_dump", + "extern memcached_return memcached_server_push(memcached_st * ptr, memcached_server_st * list) [free function]" : "memcached_server_push", + "extern memcached_return memcached_result_set_value(memcached_result_st * ptr, char * value, size_t length) [free function]" : "memcached_result_set_value", + "extern char * memcached_get_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]" : "memcached_get_by_key", + "extern memcached_return memcached_server_add_udp(memcached_st * ptr, char const * hostname, unsigned int port) [free function]" : "memcached_server_add_udp", + "extern memcached_return memcached_mget(memcached_st * ptr, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]" : "memcached_mget", + "extern memcached_server_st * memcached_servers_parse(char const * server_strings) [free function]" : "memcached_servers_parse", + "extern memcached_return memcached_set_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_set_by_key", + "extern memcached_result_st * memcached_result_create(memcached_st * ptr, memcached_result_st * result) [free function]" : "memcached_result_create", + "extern char * memcached_fetch(memcached_st * ptr, char * key, size_t * key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]" : "memcached_fetch", + "extern memcached_st * memcached_create(memcached_st * ptr) [free function]" : "memcached_create", + "extern memcached_return memcached_replace(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_replace", + "extern memcached_return memcached_callback_set(memcached_st * ptr, memcached_callback flag, void * data) [free function]" : "memcached_callback_set", + "extern memcached_return memcached_fetch_execute(memcached_st * ptr, memcached_execute_function * callback, void * context, unsigned int number_of_callbacks) [free function]" : "memcached_fetch_execute", + "extern memcached_server_st * memcached_server_clone(memcached_server_st * clone, memcached_server_st * ptr) [free function]" : "memcached_server_clone", + "extern void memcached_result_free(memcached_result_st * result) [free function]" : "memcached_result_free", + "extern char * memcached_get(memcached_st * ptr, char const * key, size_t key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]" : "memcached_get", + "extern void memcached_server_list_free(memcached_server_st * ptr) [free function]" : "memcached_server_list_free", + "extern memcached_return memcached_string_check(memcached_string_st * string, size_t need) [free function]" : "memcached_string_check", + "extern memcached_return memcached_mget_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]" : "memcached_mget_by_key", + "extern memcached_return memcached_version(memcached_st * ptr) [free function]" : "memcached_version", + "extern char const * memcached_lib_version() [free function]" : "memcached_lib_version", + "extern void memcached_quit(memcached_st * ptr) [free function]" : "memcached_quit", + "extern memcached_analysis_st * memcached_analyze(memcached_st * memc, memcached_stat_st * stat, memcached_return * error) [free function]" : "memcached_analyze", + "extern char * memcached_result_value(memcached_result_st * ptr) [free function]" : "memcached_result_value", + "extern memcached_return memcached_prepend_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_prepend_by_key", + "extern void memcached_result_reset(memcached_result_st * ptr) [free function]" : "memcached_result_reset", + "extern memcached_return memcached_server_remove(memcached_server_st * st_ptr) [free function]" : "memcached_server_remove", + "extern memcached_return memcached_delete_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, time_t expiration) [free function]" : "memcached_delete_by_key", + "extern uint32_t memcached_generate_hash(memcached_st * ptr, char const * key, size_t key_length) [free function]" : "memcached_generate_hash", + "extern memcached_return memcached_set_memory_allocators(memcached_st * ptr, memcached_malloc_function mem_malloc, memcached_free_function mem_free, memcached_realloc_function mem_realloc, memcached_calloc_function mem_calloc) [free function]" : "memcached_set_memory_allocators", + "extern memcached_return memcached_server_add(memcached_st * ptr, char const * hostname, unsigned int port) [free function]" : "memcached_server_add", + "extern memcached_server_st * memcached_server_create_with(memcached_st * memc, memcached_server_st * host, char const * hostname, unsigned int port, uint32_t weight, memcached_connection type) [free function]" : "memcached_server_create_with", + "extern memcached_return memcached_add(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_add", + "extern memcached_return memcached_flush(memcached_st * ptr, time_t expiration) [free function]" : "memcached_flush", + "extern memcached_return memcached_string_append_character(memcached_string_st * string, char character) [free function]" : "memcached_string_append_character", + "extern memcached_st * memcached_clone(memcached_st * clone, memcached_st * ptr) [free function]" : "memcached_clone", + "extern memcached_return memcached_server_add_udp_with_weight(memcached_st * ptr, char const * hostname, unsigned int port, uint32_t weight) [free function]" : "memcached_server_add_udp_with_weight", + "extern void memcached_free(memcached_st * ptr) [free function]" : "memcached_free", + "extern void * memcached_get_user_data(memcached_st * ptr) [free function]" : "memcached_get_user_data", + "extern memcached_stat_st * memcached_stat(memcached_st * ptr, char * args, memcached_return * error) [free function]" : "memcached_stat", + "extern void memcached_get_memory_allocators(memcached_st * ptr, memcached_malloc_function * mem_malloc, memcached_free_function * mem_free, memcached_realloc_function * mem_realloc, memcached_calloc_function * mem_calloc) [free function]" : "memcached_get_memory_allocators", + "extern memcached_return memcached_add_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_add_by_key", + "extern memcached_server_st * memcached_server_list_append(memcached_server_st * ptr, char const * hostname, unsigned int port, memcached_return * error) [free function]" : "memcached_server_list_append", + "extern memcached_return memcached_server_cursor(memcached_st * ptr, memcached_server_function * callback, void * context, unsigned int number_of_callbacks) [free function]" : "memcached_server_cursor", + "extern void memcached_string_free(memcached_string_st * string) [free function]" : "memcached_string_free", + "extern memcached_server_st * memcached_server_list_append_with_weight(memcached_server_st * ptr, char const * hostname, unsigned int port, uint32_t weight, memcached_return * error) [free function]" : "memcached_server_list_append_with_weight", + "extern memcached_return memcached_set(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_set", + "extern void memcached_server_free(memcached_server_st * ptr) [free function]" : "memcached_server_free", + "extern void memcached_stat_free(memcached_st * arg0, memcached_stat_st * arg1) [free function]" : "memcached_stat_free", + "extern memcached_return memcached_cas_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]" : "memcached_cas_by_key", + "extern memcached_return memcached_prepend(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_prepend", + "extern memcached_return memcached_stat_servername(memcached_stat_st * stat, char * args, char * hostname, unsigned int port) [free function]" : "memcached_stat_servername", + "extern void * memcached_callback_get(memcached_st * ptr, memcached_callback flag, memcached_return * error) [free function]" : "memcached_callback_get", + "extern memcached_string_st * memcached_string_create(memcached_st * ptr, memcached_string_st * string, size_t initial_size) [free function]" : "memcached_string_create", + "extern memcached_return memcached_server_add_unix_socket_with_weight(memcached_st * ptr, char const * filename, uint32_t weight) [free function]" : "memcached_server_add_unix_socket_with_weight", + "extern memcached_return memcached_replace_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_replace_by_key", + "extern memcached_return memcached_server_add_unix_socket(memcached_st * ptr, char const * filename) [free function]" : "memcached_server_add_unix_socket", + "extern memcached_server_st * memcached_server_by_key(memcached_st * ptr, char const * key, size_t key_length, memcached_return * error) [free function]" : "memcached_server_by_key", + "extern memcached_return memcached_flush_buffers(memcached_st * mem) [free function]" : "memcached_flush_buffers", + "extern memcached_return memcached_cas(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]" : "memcached_cas", + "extern memcached_return memcached_delete(memcached_st * ptr, char const * key, size_t key_length, time_t expiration) [free function]" : "memcached_delete", + "extern void * memcached_set_user_data(memcached_st * ptr, void * data) [free function]" : "memcached_set_user_data", + "extern memcached_return memcached_string_append(memcached_string_st * string, char * value, size_t length) [free function]" : "memcached_string_append", + "extern memcached_return memcached_append_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]" : "memcached_append_by_key", + "extern memcached_return memcached_verbosity(memcached_st * ptr, unsigned int verbosity) [free function]" : "memcached_verbosity", + "extern memcached_return memcached_behavior_set(memcached_st * ptr, memcached_behavior flag, uint64_t data) [free function]" : "memcached_behavior_set", + "extern unsigned int memcached_server_list_count(memcached_server_st * ptr) [free function]" : "memcached_server_list_count", + "extern size_t memcached_result_length(memcached_result_st * ptr) [free function]" : "memcached_result_length", + "extern memcached_return memcached_increment(memcached_st * ptr, char const * key, size_t key_length, uint32_t offset, uint64_t * value) [free function]" : "memcached_increment", + "extern memcached_return memcached_increment_with_initial(memcached_st * ptr, char const * key, size_t key_length, uint64_t offset, uint64_t initial, time_t expiration, uint64_t * value) [free function]" : "memcached_increment_with_initial", + "extern char * memcached_stat_get_value(memcached_st * ptr, memcached_stat_st * stat, char const * key, memcached_return * error) [free function]" : "memcached_stat_get_value", + "extern memcached_result_st * memcached_fetch_result(memcached_st * ptr, memcached_result_st * result, memcached_return * error) [free function]" : "memcached_fetch_result", + "extern memcached_server_st * memcached_server_create(memcached_st * memc, memcached_server_st * ptr) [free function]" : "memcached_server_create", + "extern char * memcached_strerror(memcached_st * ptr, memcached_return rc) [free function]" : "memcached_strerror", + "extern uint64_t memcached_behavior_get(memcached_st * ptr, memcached_behavior flag) [free function]" : "memcached_behavior_get", + "memcached_decrement" : "extern memcached_return memcached_decrement(memcached_st * ptr, char const * key, size_t key_length, uint32_t offset, uint64_t * value) [free function]", + "memcached_string_reset" : "extern memcached_return memcached_string_reset(memcached_string_st * string) [free function]", + "memcached_generate_hash_value" : "extern uint32_t memcached_generate_hash_value(char const * key, size_t key_length, memcached_hash hash_algorithm) [free function]", + "memcached_decrement_with_initial" : "extern memcached_return memcached_decrement_with_initial(memcached_st * ptr, char const * key, size_t key_length, uint64_t offset, uint64_t initial, time_t expiration, uint64_t * value) [free function]", + "memcached_stat_get_keys" : "extern char * * memcached_stat_get_keys(memcached_st * ptr, memcached_stat_st * stat, memcached_return * error) [free function]", + "memcached_append" : "extern memcached_return memcached_append(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "run_distribution" : "extern memcached_return run_distribution(memcached_st * ptr) [free function]", + "memcached_string_c_copy" : "extern char * memcached_string_c_copy(memcached_string_st * string) [free function]", + "memcached_server_add_with_weight" : "extern memcached_return memcached_server_add_with_weight(memcached_st * ptr, char const * hostname, unsigned int port, uint32_t weight) [free function]", + "memcached_dump" : "extern memcached_return memcached_dump(memcached_st * ptr, memcached_dump_func * function, void * context, uint32_t number_of_callbacks) [free function]", + "memcached_server_push" : "extern memcached_return memcached_server_push(memcached_st * ptr, memcached_server_st * list) [free function]", + "memcached_result_set_value" : "extern memcached_return memcached_result_set_value(memcached_result_st * ptr, char * value, size_t length) [free function]", + "memcached_get_by_key" : "extern char * memcached_get_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]", + "memcached_server_add_udp" : "extern memcached_return memcached_server_add_udp(memcached_st * ptr, char const * hostname, unsigned int port) [free function]", + "memcached_mget" : "extern memcached_return memcached_mget(memcached_st * ptr, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]", + "memcached_servers_parse" : "extern memcached_server_st * memcached_servers_parse(char const * server_strings) [free function]", + "memcached_set_by_key" : "extern memcached_return memcached_set_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_result_create" : "extern memcached_result_st * memcached_result_create(memcached_st * ptr, memcached_result_st * result) [free function]", + "memcached_fetch" : "extern char * memcached_fetch(memcached_st * ptr, char * key, size_t * key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]", + "memcached_create" : "extern memcached_st * memcached_create(memcached_st * ptr) [free function]", + "memcached_replace" : "extern memcached_return memcached_replace(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_callback_set" : "extern memcached_return memcached_callback_set(memcached_st * ptr, memcached_callback flag, void * data) [free function]", + "memcached_fetch_execute" : "extern memcached_return memcached_fetch_execute(memcached_st * ptr, memcached_execute_function * callback, void * context, unsigned int number_of_callbacks) [free function]", + "memcached_server_clone" : "extern memcached_server_st * memcached_server_clone(memcached_server_st * clone, memcached_server_st * ptr) [free function]", + "memcached_result_free" : "extern void memcached_result_free(memcached_result_st * result) [free function]", + "memcached_get" : "extern char * memcached_get(memcached_st * ptr, char const * key, size_t key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]", + "memcached_server_list_free" : "extern void memcached_server_list_free(memcached_server_st * ptr) [free function]", + "memcached_string_check" : "extern memcached_return memcached_string_check(memcached_string_st * string, size_t need) [free function]", + "memcached_mget_by_key" : "extern memcached_return memcached_mget_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]", + "memcached_version" : "extern memcached_return memcached_version(memcached_st * ptr) [free function]", + "memcached_lib_version" : "extern char const * memcached_lib_version() [free function]", + "memcached_quit" : "extern void memcached_quit(memcached_st * ptr) [free function]", + "memcached_analyze" : "extern memcached_analysis_st * memcached_analyze(memcached_st * memc, memcached_stat_st * stat, memcached_return * error) [free function]", + "memcached_result_value" : "extern char * memcached_result_value(memcached_result_st * ptr) [free function]", + "memcached_prepend_by_key" : "extern memcached_return memcached_prepend_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_result_reset" : "extern void memcached_result_reset(memcached_result_st * ptr) [free function]", + "memcached_server_remove" : "extern memcached_return memcached_server_remove(memcached_server_st * st_ptr) [free function]", + "memcached_delete_by_key" : "extern memcached_return memcached_delete_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, time_t expiration) [free function]", + "memcached_generate_hash" : "extern uint32_t memcached_generate_hash(memcached_st * ptr, char const * key, size_t key_length) [free function]", + "memcached_set_memory_allocators" : "extern memcached_return memcached_set_memory_allocators(memcached_st * ptr, memcached_malloc_function mem_malloc, memcached_free_function mem_free, memcached_realloc_function mem_realloc, memcached_calloc_function mem_calloc) [free function]", + "memcached_server_add" : "extern memcached_return memcached_server_add(memcached_st * ptr, char const * hostname, unsigned int port) [free function]", + "memcached_server_create_with" : "extern memcached_server_st * memcached_server_create_with(memcached_st * memc, memcached_server_st * host, char const * hostname, unsigned int port, uint32_t weight, memcached_connection type) [free function]", + "memcached_add" : "extern memcached_return memcached_add(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_flush" : "extern memcached_return memcached_flush(memcached_st * ptr, time_t expiration) [free function]", + "memcached_string_append_character" : "extern memcached_return memcached_string_append_character(memcached_string_st * string, char character) [free function]", + "memcached_clone" : "extern memcached_st * memcached_clone(memcached_st * clone, memcached_st * ptr) [free function]", + "memcached_server_add_udp_with_weight" : "extern memcached_return memcached_server_add_udp_with_weight(memcached_st * ptr, char const * hostname, unsigned int port, uint32_t weight) [free function]", + "memcached_free" : "extern void memcached_free(memcached_st * ptr) [free function]", + "memcached_get_user_data" : "extern void * memcached_get_user_data(memcached_st * ptr) [free function]", + "memcached_stat" : "extern memcached_stat_st * memcached_stat(memcached_st * ptr, char * args, memcached_return * error) [free function]", + "memcached_get_memory_allocators" : "extern void memcached_get_memory_allocators(memcached_st * ptr, memcached_malloc_function * mem_malloc, memcached_free_function * mem_free, memcached_realloc_function * mem_realloc, memcached_calloc_function * mem_calloc) [free function]", + "memcached_add_by_key" : "extern memcached_return memcached_add_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_server_list_append" : "extern memcached_server_st * memcached_server_list_append(memcached_server_st * ptr, char const * hostname, unsigned int port, memcached_return * error) [free function]", + "memcached_server_cursor" : "extern memcached_return memcached_server_cursor(memcached_st * ptr, memcached_server_function * callback, void * context, unsigned int number_of_callbacks) [free function]", + "memcached_string_free" : "extern void memcached_string_free(memcached_string_st * string) [free function]", + "memcached_server_list_append_with_weight" : "extern memcached_server_st * memcached_server_list_append_with_weight(memcached_server_st * ptr, char const * hostname, unsigned int port, uint32_t weight, memcached_return * error) [free function]", + "memcached_set" : "extern memcached_return memcached_set(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_server_free" : "extern void memcached_server_free(memcached_server_st * ptr) [free function]", + "memcached_stat_free" : "extern void memcached_stat_free(memcached_st * arg0, memcached_stat_st * arg1) [free function]", + "memcached_cas_by_key" : "extern memcached_return memcached_cas_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]", + "memcached_prepend" : "extern memcached_return memcached_prepend(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_stat_servername" : "extern memcached_return memcached_stat_servername(memcached_stat_st * stat, char * args, char * hostname, unsigned int port) [free function]", + "memcached_callback_get" : "extern void * memcached_callback_get(memcached_st * ptr, memcached_callback flag, memcached_return * error) [free function]", + "memcached_string_create" : "extern memcached_string_st * memcached_string_create(memcached_st * ptr, memcached_string_st * string, size_t initial_size) [free function]", + "memcached_server_add_unix_socket_with_weight" : "extern memcached_return memcached_server_add_unix_socket_with_weight(memcached_st * ptr, char const * filename, uint32_t weight) [free function]", + "memcached_replace_by_key" : "extern memcached_return memcached_replace_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_server_add_unix_socket" : "extern memcached_return memcached_server_add_unix_socket(memcached_st * ptr, char const * filename) [free function]", + "memcached_server_by_key" : "extern memcached_server_st * memcached_server_by_key(memcached_st * ptr, char const * key, size_t key_length, memcached_return * error) [free function]", + "memcached_flush_buffers" : "extern memcached_return memcached_flush_buffers(memcached_st * mem) [free function]", + "memcached_cas" : "extern memcached_return memcached_cas(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]", + "memcached_delete" : "extern memcached_return memcached_delete(memcached_st * ptr, char const * key, size_t key_length, time_t expiration) [free function]", + "memcached_set_user_data" : "extern void * memcached_set_user_data(memcached_st * ptr, void * data) [free function]", + "memcached_string_append" : "extern memcached_return memcached_string_append(memcached_string_st * string, char * value, size_t length) [free function]", + "memcached_append_by_key" : "extern memcached_return memcached_append_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]", + "memcached_verbosity" : "extern memcached_return memcached_verbosity(memcached_st * ptr, unsigned int verbosity) [free function]", + "memcached_behavior_set" : "extern memcached_return memcached_behavior_set(memcached_st * ptr, memcached_behavior flag, uint64_t data) [free function]", + "memcached_server_list_count" : "extern unsigned int memcached_server_list_count(memcached_server_st * ptr) [free function]", + "memcached_result_length" : "extern size_t memcached_result_length(memcached_result_st * ptr) [free function]", + "memcached_increment" : "extern memcached_return memcached_increment(memcached_st * ptr, char const * key, size_t key_length, uint32_t offset, uint64_t * value) [free function]", + "memcached_increment_with_initial" : "extern memcached_return memcached_increment_with_initial(memcached_st * ptr, char const * key, size_t key_length, uint64_t offset, uint64_t initial, time_t expiration, uint64_t * value) [free function]", + "memcached_stat_get_value" : "extern char * memcached_stat_get_value(memcached_st * ptr, memcached_stat_st * stat, char const * key, memcached_return * error) [free function]", + "memcached_fetch_result" : "extern memcached_result_st * memcached_fetch_result(memcached_st * ptr, memcached_result_st * result, memcached_return * error) [free function]", + "memcached_server_create" : "extern memcached_server_st * memcached_server_create(memcached_st * memc, memcached_server_st * ptr) [free function]", + "memcached_strerror" : "extern char * memcached_strerror(memcached_st * ptr, memcached_return rc) [free function]", + "memcached_behavior_get" : "extern uint64_t memcached_behavior_get(memcached_st * ptr, memcached_behavior flag) [free function]", +} + +class memcached_hash( ctypes_utils.Enumeration ): + MEMCACHED_HASH_DEFAULT = 0 + MEMCACHED_HASH_MD5 = 1 + MEMCACHED_HASH_CRC = 2 + MEMCACHED_HASH_FNV1_64 = 3 + MEMCACHED_HASH_FNV1A_64 = 4 + MEMCACHED_HASH_FNV1_32 = 5 + MEMCACHED_HASH_FNV1A_32 = 6 + MEMCACHED_HASH_HSIEH = 7 + MEMCACHED_HASH_MURMUR = 8 + MEMCACHED_HASH_JENKINS = 9 + +class memcached_behavior( ctypes_utils.Enumeration ): + MEMCACHED_BEHAVIOR_NO_BLOCK = 0 + MEMCACHED_BEHAVIOR_TCP_NODELAY = 1 + MEMCACHED_BEHAVIOR_HASH = 2 + MEMCACHED_BEHAVIOR_KETAMA = 3 + MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE = 4 + MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE = 5 + MEMCACHED_BEHAVIOR_CACHE_LOOKUPS = 6 + MEMCACHED_BEHAVIOR_SUPPORT_CAS = 7 + MEMCACHED_BEHAVIOR_POLL_TIMEOUT = 8 + MEMCACHED_BEHAVIOR_DISTRIBUTION = 9 + MEMCACHED_BEHAVIOR_BUFFER_REQUESTS = 10 + MEMCACHED_BEHAVIOR_USER_DATA = 11 + MEMCACHED_BEHAVIOR_SORT_HOSTS = 12 + MEMCACHED_BEHAVIOR_VERIFY_KEY = 13 + MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT = 14 + MEMCACHED_BEHAVIOR_RETRY_TIMEOUT = 15 + MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED = 16 + MEMCACHED_BEHAVIOR_KETAMA_HASH = 17 + MEMCACHED_BEHAVIOR_BINARY_PROTOCOL = 18 + MEMCACHED_BEHAVIOR_SND_TIMEOUT = 19 + MEMCACHED_BEHAVIOR_RCV_TIMEOUT = 20 + MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT = 21 + MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK = 22 + MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK = 23 + MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH = 24 + MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY = 25 + MEMCACHED_BEHAVIOR_NOREPLY = 26 + MEMCACHED_BEHAVIOR_USE_UDP = 27 + MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS = 28 + MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS = 29 + +class memcached_callback( ctypes_utils.Enumeration ): + MEMCACHED_CALLBACK_PREFIX_KEY = 0 + MEMCACHED_CALLBACK_USER_DATA = 1 + MEMCACHED_CALLBACK_CLEANUP_FUNCTION = 2 + MEMCACHED_CALLBACK_CLONE_FUNCTION = 3 + MEMCACHED_CALLBACK_GET_FAILURE = 7 + MEMCACHED_CALLBACK_DELETE_TRIGGER = 8 + +class memcached_return( ctypes_utils.Enumeration ): + MEMCACHED_SUCCESS = 0 + MEMCACHED_FAILURE = 1 + MEMCACHED_HOST_LOOKUP_FAILURE = 2 + MEMCACHED_CONNECTION_FAILURE = 3 + MEMCACHED_CONNECTION_BIND_FAILURE = 4 + MEMCACHED_WRITE_FAILURE = 5 + MEMCACHED_READ_FAILURE = 6 + MEMCACHED_UNKNOWN_READ_FAILURE = 7 + MEMCACHED_PROTOCOL_ERROR = 8 + MEMCACHED_CLIENT_ERROR = 9 + MEMCACHED_SERVER_ERROR = 10 + MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE = 11 + MEMCACHED_DATA_EXISTS = 12 + MEMCACHED_DATA_DOES_NOT_EXIST = 13 + MEMCACHED_NOTSTORED = 14 + MEMCACHED_STORED = 15 + MEMCACHED_NOTFOUND = 16 + MEMCACHED_MEMORY_ALLOCATION_FAILURE = 17 + MEMCACHED_PARTIAL_READ = 18 + MEMCACHED_SOME_ERRORS = 19 + MEMCACHED_NO_SERVERS = 20 + MEMCACHED_END = 21 + MEMCACHED_DELETED = 22 + MEMCACHED_VALUE = 23 + MEMCACHED_STAT = 24 + MEMCACHED_ITEM = 25 + MEMCACHED_ERRNO = 26 + MEMCACHED_FAIL_UNIX_SOCKET = 27 + MEMCACHED_NOT_SUPPORTED = 28 + MEMCACHED_NO_KEY_PROVIDED = 29 + MEMCACHED_FETCH_NOTFINISHED = 30 + MEMCACHED_TIMEOUT = 31 + MEMCACHED_BUFFERED = 32 + MEMCACHED_BAD_KEY_PROVIDED = 33 + MEMCACHED_INVALID_HOST_PROTOCOL = 34 + MEMCACHED_SERVER_MARKED_DEAD = 35 + MEMCACHED_UNKNOWN_STAT_KEY = 36 + MEMCACHED_MAXIMUM_RETURN = 37 + +class memcached_connection( ctypes_utils.Enumeration ): + MEMCACHED_CONNECTION_UNKNOWN = 0 + MEMCACHED_CONNECTION_TCP = 1 + MEMCACHED_CONNECTION_UDP = 2 + MEMCACHED_CONNECTION_UNIX_SOCKET = 3 + +class memcached_analysis_st(ctypes.Structure): + """class memcached_analysis_st""" + +class memcached_string_st(ctypes.Structure): + """class memcached_string_st""" + +class memcached_result_st(ctypes.Structure): + """class memcached_result_st""" + +class memcached_server_st(ctypes.Structure): + """class memcached_server_st""" + +class memcached_st(ctypes.Structure): + """class memcached_st""" + +class memcached_stat_st(ctypes.Structure): + """class memcached_stat_st""" + +class addrinfo(ctypes.Structure): + """class declaration addrinfo""" + _fields_ = [] + +class memcached_continuum_item_st(ctypes.Structure): + """class declaration memcached_continuum_item_st""" + _fields_ = [] + +memcached_analysis_st._fields_ = [ #class memcached_analysis_st + ("average_item_size", ctypes.c_uint), + ("longest_uptime", ctypes.c_uint), + ("least_free_server", ctypes.c_uint), + ("most_consumed_server", ctypes.c_uint), + ("oldest_server", ctypes.c_uint), + ("pool_hit_ratio", ctypes.c_double), + ("most_used_bytes", ctypes.c_ulonglong), + ("least_remaining_bytes", ctypes.c_ulonglong), +] + +memcached_string_st._fields_ = [ #class memcached_string_st + ("root", ctypes.POINTER( memcached_st )), + ("end", ctypes.c_char_p), + ("string", ctypes.c_char_p), + ("current_size", ctypes.c_uint), + ("block_size", ctypes.c_uint), + ("is_allocated", ctypes.c_bool), +] + +memcached_result_st._fields_ = [ #class memcached_result_st + ("flags", ctypes.c_uint), + ("is_allocated", ctypes.c_bool), + ("expiration", ctypes.c_long), + ("root", ctypes.POINTER( memcached_st )), + ("key_length", ctypes.c_uint), + ("cas", ctypes.c_ulonglong), + ("value", memcached_string_st), + ("key", ( ctypes.c_char * 251 )), +] + +memcached_server_st._fields_ = [ #class memcached_server_st + ("is_allocated", ctypes.c_bool), + ("sockaddr_inited", ctypes.c_bool), + ("count", ctypes.c_ushort), + ("cursor_active", ctypes.c_uint), + ("port", ctypes.c_uint), + ("cached_errno", ctypes.c_int), + ("fd", ctypes.c_int), + ("io_bytes_sent", ctypes.c_uint), + ("server_failure_counter", ctypes.c_uint), + ("weight", ctypes.c_uint), + ("major_version", ctypes.c_ubyte), + ("micro_version", ctypes.c_ubyte), + ("minor_version", ctypes.c_ubyte), + ("type", memcached_connection), + ("read_ptr", ctypes.c_char_p), + ("read_buffer_length", ctypes.c_uint), + ("read_data_length", ctypes.c_uint), + ("write_buffer_offset", ctypes.c_uint), + ("address_info", ctypes.POINTER( addrinfo )), + ("next_retry", ctypes.c_long), + ("root", ctypes.POINTER( memcached_st )), + ("limit_maxbytes", ctypes.c_ulonglong), + ("read_buffer", ( ctypes.c_char * 8196 )), + ("write_buffer", ( ctypes.c_char * 8196 )), + ("hostname", ( ctypes.c_char * 64 )), +] + +memcached_st._fields_ = [ #class memcached_st + ("purging", ctypes.c_ubyte), + ("is_allocated", ctypes.c_bool), + ("distribution", ctypes.c_ubyte), + ("hash", ctypes.c_ubyte), + ("continuum_points_counter", ctypes.c_uint), + ("hosts", ctypes.POINTER( memcached_server_st )), + ("snd_timeout", ctypes.c_int), + ("rcv_timeout", ctypes.c_int), + ("server_failure_limit", ctypes.c_uint), + ("io_msg_watermark", ctypes.c_uint), + ("io_bytes_watermark", ctypes.c_uint), + ("io_key_prefetch", ctypes.c_uint), + ("number_of_hosts", ctypes.c_uint), + ("cursor_server", ctypes.c_uint), + ("cached_errno", ctypes.c_int), + ("flags", ctypes.c_uint), + ("poll_timeout", ctypes.c_int), + ("connect_timeout", ctypes.c_int), + ("retry_timeout", ctypes.c_int), + ("continuum_count", ctypes.c_uint), + ("send_size", ctypes.c_int), + ("recv_size", ctypes.c_int), + ("user_data", ctypes.c_void_p), + ("next_distribution_rebuild", ctypes.c_long), + ("prefix_key_length", ctypes.c_uint), + ("hash_continuum", memcached_hash), + ("result", memcached_result_st), + ("continuum", ctypes.POINTER( memcached_continuum_item_st )), + ("on_clone", ctypes.POINTER( ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_st ) ) )), + ("on_cleanup", ctypes.POINTER( ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ) ) )), + ("call_free", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( memcached_st ), ctypes.c_void_p ) )), + ("call_malloc", ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_uint ) )), + ("call_realloc", ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_void_p, ctypes.c_uint ) )), + ("call_calloc", ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_uint, ctypes.c_uint ) )), + ("get_key_failure", ctypes.POINTER( ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( memcached_result_st ) ) )), + ("delete_trigger", ctypes.POINTER( ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint ) )), + ("prefix_key", ( ctypes.c_char * 128 )), + ("number_of_replicas", ctypes.c_uint), +] + +memcached_stat_st._fields_ = [ #class memcached_stat_st + ("connection_structures", ctypes.c_uint), + ("curr_connections", ctypes.c_uint), + ("curr_items", ctypes.c_uint), + ("pid", ctypes.c_uint), + ("pointer_size", ctypes.c_uint), + ("rusage_system_microseconds", ctypes.c_uint), + ("rusage_system_seconds", ctypes.c_uint), + ("rusage_user_microseconds", ctypes.c_uint), + ("rusage_user_seconds", ctypes.c_uint), + ("threads", ctypes.c_uint), + ("time", ctypes.c_uint), + ("total_connections", ctypes.c_uint), + ("total_items", ctypes.c_uint), + ("uptime", ctypes.c_uint), + ("bytes", ctypes.c_ulonglong), + ("bytes_read", ctypes.c_ulonglong), + ("bytes_written", ctypes.c_ulonglong), + ("cmd_get", ctypes.c_ulonglong), + ("cmd_set", ctypes.c_ulonglong), + ("evictions", ctypes.c_ulonglong), + ("get_hits", ctypes.c_ulonglong), + ("get_misses", ctypes.c_ulonglong), + ("limit_maxbytes", ctypes.c_ulonglong), + ("version", ( ctypes.c_char * 24 )), +] + +memcached_delete_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_long ) +memcached_delete = memcached_delete_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_delete(memcached_st * ptr, char const * key, size_t key_length, time_t expiration) [free function]"], libmemcached_lib ) ) + +memcached_stat_get_value_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_stat_st ), ctypes.c_char_p, ctypes.POINTER( memcached_return ) ) +memcached_stat_get_value = memcached_stat_get_value_type( ( libmemcached_lib.undecorated_names["extern char * memcached_stat_get_value(memcached_st * ptr, memcached_stat_st * stat, char const * key, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_analyze_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_analysis_st ), ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_stat_st ), ctypes.POINTER( memcached_return ) ) +memcached_analyze = memcached_analyze_type( ( libmemcached_lib.undecorated_names["extern memcached_analysis_st * memcached_analyze(memcached_st * memc, memcached_stat_st * stat, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_string_append_character_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_string_st ), ctypes.c_char ) +memcached_string_append_character = memcached_string_append_character_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_string_append_character(memcached_string_st * string, char character) [free function]"], libmemcached_lib ) ) + +memcached_dump_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.POINTER( ctypes.POINTER( ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_void_p ) ) ), ctypes.c_void_p, ctypes.c_uint ) +memcached_dump = memcached_dump_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_dump(memcached_st * ptr, memcached_dump_func * function, void * context, uint32_t number_of_callbacks) [free function]"], libmemcached_lib ) ) + +memcached_server_clone_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_server_st ), ctypes.POINTER( memcached_server_st ), ctypes.POINTER( memcached_server_st ) ) +memcached_server_clone = memcached_server_clone_type( ( libmemcached_lib.undecorated_names["extern memcached_server_st * memcached_server_clone(memcached_server_st * clone, memcached_server_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_delete_by_key_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_long ) +memcached_delete_by_key = memcached_delete_by_key_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_delete_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, time_t expiration) [free function]"], libmemcached_lib ) ) + +memcached_stat_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_stat_st ), ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.POINTER( memcached_return ) ) +memcached_stat = memcached_stat_type( ( libmemcached_lib.undecorated_names["extern memcached_stat_st * memcached_stat(memcached_st * ptr, char * args, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_generate_hash_type = ctypes.CFUNCTYPE( ctypes.c_uint, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint ) +memcached_generate_hash = memcached_generate_hash_type( ( libmemcached_lib.undecorated_names["extern uint32_t memcached_generate_hash(memcached_st * ptr, char const * key, size_t key_length) [free function]"], libmemcached_lib ) ) + +memcached_result_length_type = ctypes.CFUNCTYPE( ctypes.c_uint, ctypes.POINTER( memcached_result_st ) ) +memcached_result_length = memcached_result_length_type( ( libmemcached_lib.undecorated_names["extern size_t memcached_result_length(memcached_result_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_set_user_data_type = ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_void_p ) +memcached_set_user_data = memcached_set_user_data_type( ( libmemcached_lib.undecorated_names["extern void * memcached_set_user_data(memcached_st * ptr, void * data) [free function]"], libmemcached_lib ) ) + +memcached_flush_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_long ) +memcached_flush = memcached_flush_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_flush(memcached_st * ptr, time_t expiration) [free function]"], libmemcached_lib ) ) + +memcached_strerror_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_st ), memcached_return ) +memcached_strerror = memcached_strerror_type( ( libmemcached_lib.undecorated_names["extern char * memcached_strerror(memcached_st * ptr, memcached_return rc) [free function]"], libmemcached_lib ) ) + +memcached_cas_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_long, ctypes.c_uint, ctypes.c_ulonglong ) +memcached_cas = memcached_cas_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_cas(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]"], libmemcached_lib ) ) + +memcached_server_free_type = ctypes.CFUNCTYPE( None, ctypes.POINTER( memcached_server_st ) ) +memcached_server_free = memcached_server_free_type( ( libmemcached_lib.undecorated_names["extern void memcached_server_free(memcached_server_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_behavior_set_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), memcached_behavior, ctypes.c_ulonglong ) +memcached_behavior_set = memcached_behavior_set_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_behavior_set(memcached_st * ptr, memcached_behavior flag, uint64_t data) [free function]"], libmemcached_lib ) ) + +memcached_get_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( ctypes.c_uint ), ctypes.POINTER( ctypes.c_uint ), ctypes.POINTER( memcached_return ) ) +memcached_get = memcached_get_type( ( libmemcached_lib.undecorated_names["extern char * memcached_get(memcached_st * ptr, char const * key, size_t key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_server_list_append_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_server_st ), ctypes.POINTER( memcached_server_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( memcached_return ) ) +memcached_server_list_append = memcached_server_list_append_type( ( libmemcached_lib.undecorated_names["extern memcached_server_st * memcached_server_list_append(memcached_server_st * ptr, char const * hostname, unsigned int port, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_set_memory_allocators_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_uint ) ), ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( memcached_st ), ctypes.c_void_p ) ), ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_void_p, ctypes.c_uint ) ), ctypes.POINTER( ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ), ctypes.c_uint, ctypes.c_uint ) ) ) +memcached_set_memory_allocators = memcached_set_memory_allocators_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_set_memory_allocators(memcached_st * ptr, memcached_malloc_function mem_malloc, memcached_free_function mem_free, memcached_realloc_function mem_realloc, memcached_calloc_function mem_calloc) [free function]"], libmemcached_lib ) ) + +memcached_string_c_copy_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_string_st ) ) +memcached_string_c_copy = memcached_string_c_copy_type( ( libmemcached_lib.undecorated_names["extern char * memcached_string_c_copy(memcached_string_st * string) [free function]"], libmemcached_lib ) ) + +memcached_generate_hash_value_type = ctypes.CFUNCTYPE( ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, memcached_hash ) +memcached_generate_hash_value = memcached_generate_hash_value_type( ( libmemcached_lib.undecorated_names["extern uint32_t memcached_generate_hash_value(char const * key, size_t key_length, memcached_hash hash_algorithm) [free function]"], libmemcached_lib ) ) + +memcached_server_by_key_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_server_st ), ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( memcached_return ) ) +memcached_server_by_key = memcached_server_by_key_type( ( libmemcached_lib.undecorated_names["extern memcached_server_st * memcached_server_by_key(memcached_st * ptr, char const * key, size_t key_length, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_set_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_long, ctypes.c_uint ) +memcached_set = memcached_set_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_set(memcached_st * ptr, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]"], libmemcached_lib ) ) + +memcached_fetch_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.POINTER( ctypes.c_uint ), ctypes.POINTER( ctypes.c_uint ), ctypes.POINTER( ctypes.c_uint ), ctypes.POINTER( memcached_return ) ) +memcached_fetch = memcached_fetch_type( ( libmemcached_lib.undecorated_names["extern char * memcached_fetch(memcached_st * ptr, char * key, size_t * key_length, size_t * value_length, uint32_t * flags, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_flush_buffers_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ) ) +memcached_flush_buffers = memcached_flush_buffers_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_flush_buffers(memcached_st * mem) [free function]"], libmemcached_lib ) ) + +memcached_server_create_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_server_st ), ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_server_st ) ) +memcached_server_create = memcached_server_create_type( ( libmemcached_lib.undecorated_names["extern memcached_server_st * memcached_server_create(memcached_st * memc, memcached_server_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_result_create_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_result_st ), ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_result_st ) ) +memcached_result_create = memcached_result_create_type( ( libmemcached_lib.undecorated_names["extern memcached_result_st * memcached_result_create(memcached_st * ptr, memcached_result_st * result) [free function]"], libmemcached_lib ) ) + +memcached_cas_by_key_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_long, ctypes.c_uint, ctypes.c_ulonglong ) +memcached_cas_by_key = memcached_cas_by_key_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_cas_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags, uint64_t cas) [free function]"], libmemcached_lib ) ) + +memcached_create_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_st ) ) +memcached_create = memcached_create_type( ( libmemcached_lib.undecorated_names["extern memcached_st * memcached_create(memcached_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_set_by_key_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_char_p, ctypes.c_uint, ctypes.c_long, ctypes.c_uint ) +memcached_set_by_key = memcached_set_by_key_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_set_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char const * key, size_t key_length, char const * value, size_t value_length, time_t expiration, uint32_t flags) [free function]"], libmemcached_lib ) ) + +memcached_behavior_get_type = ctypes.CFUNCTYPE( ctypes.c_ulonglong, ctypes.POINTER( memcached_st ), memcached_behavior ) +memcached_behavior_get = memcached_behavior_get_type( ( libmemcached_lib.undecorated_names["extern uint64_t memcached_behavior_get(memcached_st * ptr, memcached_behavior flag) [free function]"], libmemcached_lib ) ) + +memcached_mget_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.POINTER( ctypes.c_char_p ), ctypes.POINTER( ctypes.c_uint ), ctypes.c_uint ) +memcached_mget = memcached_mget_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_mget(memcached_st * ptr, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]"], libmemcached_lib ) ) + +memcached_server_add_unix_socket_with_weight_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint ) +memcached_server_add_unix_socket_with_weight = memcached_server_add_unix_socket_with_weight_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_server_add_unix_socket_with_weight(memcached_st * ptr, char const * filename, uint32_t weight) [free function]"], libmemcached_lib ) ) + +memcached_fetch_result_type = ctypes.CFUNCTYPE( ctypes.POINTER( memcached_result_st ), ctypes.POINTER( memcached_st ), ctypes.POINTER( memcached_result_st ), ctypes.POINTER( memcached_return ) ) +memcached_fetch_result = memcached_fetch_result_type( ( libmemcached_lib.undecorated_names["extern memcached_result_st * memcached_fetch_result(memcached_st * ptr, memcached_result_st * result, memcached_return * error) [free function]"], libmemcached_lib ) ) + +memcached_increment_with_initial_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.c_ulonglong, ctypes.c_ulonglong, ctypes.c_long, ctypes.POINTER( ctypes.c_ulonglong ) ) +memcached_increment_with_initial = memcached_increment_with_initial_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_increment_with_initial(memcached_st * ptr, char const * key, size_t key_length, uint64_t offset, uint64_t initial, time_t expiration, uint64_t * value) [free function]"], libmemcached_lib ) ) + +memcached_mget_by_key_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ), ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( ctypes.c_char_p ), ctypes.POINTER( ctypes.c_uint ), ctypes.c_uint ) +memcached_mget_by_key = memcached_mget_by_key_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_mget_by_key(memcached_st * ptr, char const * master_key, size_t master_key_length, char * * keys, size_t * key_length, unsigned int number_of_keys) [free function]"], libmemcached_lib ) ) + +memcached_get_user_data_type = ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.POINTER( memcached_st ) ) +memcached_get_user_data = memcached_get_user_data_type( ( libmemcached_lib.undecorated_names["extern void * memcached_get_user_data(memcached_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_result_value_type = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( memcached_result_st ) ) +memcached_result_value = memcached_result_value_type( ( libmemcached_lib.undecorated_names["extern char * memcached_result_value(memcached_result_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_version_type = ctypes.CFUNCTYPE( memcached_return, ctypes.POINTER( memcached_st ) ) +memcached_version = memcached_version_type( ( libmemcached_lib.undecorated_names["extern memcached_return memcached_version(memcached_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached_result_reset_type = ctypes.CFUNCTYPE( None, ctypes.POINTER( memcached_result_st ) ) +memcached_result_reset = memcached_result_reset_type( ( libmemcached_lib.undecorated_names["extern void memcached_result_reset(memcached_result_st * ptr) [free function]"], libmemcached_lib ) ) + +memcached... [truncated message content] |
From: <rom...@us...> - 2009-08-09 20:38:16
|
Revision: 1750 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1750&view=rev Author: roman_yakovenko Date: 2009-08-09 20:38:09 +0000 (Sun, 09 Aug 2009) Log Message: ----------- adding another example of ctypes code generator usage Added Paths: ----------- pyplusplus_dev/examples/libmemcached_dev/dev/ pyplusplus_dev/examples/libmemcached_dev/pymemcached/ pyplusplus_dev/examples/libmemcached_dev/test.py Added: pyplusplus_dev/examples/libmemcached_dev/test.py =================================================================== --- pyplusplus_dev/examples/libmemcached_dev/test.py (rev 0) +++ pyplusplus_dev/examples/libmemcached_dev/test.py 2009-08-09 20:38:09 UTC (rev 1750) @@ -0,0 +1,18 @@ +import ctypes +import pymemcached as mmc + +print 'memcached version: ', mmc.memcached_lib_version() + +memc = mmc.memcached_create(None) +servers = mmc.memcached_servers_parse( "localhost:11211" ) +mmc.memcached_server_push(memc, servers); +mmc.memcached_server_list_free(servers); + +key = "1" +value = "Python is better!" + +result = mmc.memcached_add( memc, key, len(key), value, len(value), 0, 0); +print "key/value (%s/%s ) was stored?: " % ( key, value ) + mmc.memcached_strerror(memc, result); + +result = mmc.memcached_delete( memc, key, len(key), 0); +print "key/value (%s/%s ) was deleted?: " % ( key, value ) + mmc.memcached_strerror(memc, result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-09 20:27:55
|
Revision: 1749 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1749&view=rev Author: roman_yakovenko Date: 2009-08-09 20:27:44 +0000 (Sun, 09 Aug 2009) Log Message: ----------- adding another example of ctypes code generator usage Added Paths: ----------- pyplusplus_dev/examples/libmemcached_dev/ pyplusplus_dev/examples/libmemcached_dev/libmemcached-0.31.tar.gz Added: pyplusplus_dev/examples/libmemcached_dev/libmemcached-0.31.tar.gz =================================================================== (Binary files differ) Property changes on: pyplusplus_dev/examples/libmemcached_dev/libmemcached-0.31.tar.gz ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-08 19:57:53
|
Revision: 1748 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1748&view=rev Author: roman_yakovenko Date: 2009-08-08 19:57:28 +0000 (Sat, 08 Aug 2009) Log Message: ----------- ctypes code generator cleanup Modified Paths: -------------- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/unittests/ctypes_tester.py pyplusplus_dev/unittests/sconstruct Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-08-08 19:53:41 UTC (rev 1747) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-08-08 19:57:28 UTC (rev 1748) @@ -131,69 +131,15 @@ return self.module def visit_member_function( self ): - self.__dependencies_manager.add_exported( self.curr_decl ) - md_cc = self.__class2methods_def[ self.curr_decl.parent ] - cls_intro_cc = self.__class2introduction[ self.curr_decl.parent ] - mem_fun_def_cc = code_creators.mem_fun_definition_t( self.curr_decl ) - #TODO: calculate only exported functions - if 0 == len( self.curr_decl.overloads): - #this is the first and the last and the only class constructor - md_cc.adopt_creator( mem_fun_def_cc ) - cls_intro_cc.adopt_creator( code_creators.mem_fun_introduction_t(self.curr_decl) ) - else: - has_introduction = cls_intro_cc.find_by_creator_class( code_creators.mem_fun_introduction_t, unique=False ) - has_introduction = filter( lambda cc: cc.alias == mem_fun_def_cc.alias, has_introduction ) - if not has_introduction: - cls_intro_cc.adopt_creator( code_creators.mem_fun_introduction_t(self.curr_decl) ) - - multi_method_def = md_cc.find_mutli_method( mem_fun_def_cc.alias ) - if not multi_method_def: - multi_method_def = code_creators.multi_method_definition_t () - md_cc.adopt_creator( multi_method_def ) - multi_method_def.adopt_creator( mem_fun_def_cc ) - - #~ if self.curr_decl.virtuality == VIRTUALITY_TYPES.NOT_VIRTUAL: - #~ cls_intro_cc.adopt_creator( code_creators.mem_fun_introduction_t( self.curr_decl ) ) - #~ elif self.curr_decl.virtuality == VIRTUALITY_TYPES.VIRTUAL: - #~ cls_intro_cc.adopt_creator( code_creators.vmem_fun_introduction_t( self.curr_decl ) ) - #~ else: - #~ pass - + pass #c code doesn't have member functions def visit_constructor( self ): - self.__dependencies_manager.add_exported( self.curr_decl ) - md_cc = self.__class2methods_def[ self.curr_decl.parent ] - cls_intro_cc = self.__class2introduction[ self.curr_decl.parent ] - init_def_cc = code_creators.init_definition_t( self.curr_decl ) - #TODO: calculate only exported constructors - if 0 == len( self.curr_decl.overloads): - #this is the first and the last and the only class constructor - md_cc.adopt_creator( init_def_cc ) - cls_intro_cc.adopt_creator( code_creators.init_introduction_t(self.curr_decl) ) - else: - has_constructor = cls_intro_cc.find_by_creator_class( code_creators.init_introduction_t ) - if not has_constructor: - cls_intro_cc.adopt_creator( code_creators.init_introduction_t(self.curr_decl) ) - - multi_method_def = md_cc.find_mutli_method( init_def_cc.alias ) - if not multi_method_def: - multi_method_def = code_creators.multi_method_definition_t () - md_cc.adopt_creator( multi_method_def ) - multi_method_def.adopt_creator( init_def_cc ) - + pass #c code doesn't have member functions def visit_destructor( self ): - self.__dependencies_manager.add_exported( self.curr_decl ) - cls_intro_cc = self.__class2introduction[ self.curr_decl.parent ] - cls_intro_cc.adopt_creator( code_creators.del_introduction_t( self.curr_decl ) ) - - md_cc = self.__class2methods_def[ self.curr_decl.parent ] - md_cc.adopt_creator( code_creators.del_definition_t( self.curr_decl ) ) - + pass #c code doesn't have member functions def visit_member_operator( self ): - self.__dependencies_manager.add_exported( self.curr_decl ) - + pass #c code doesn't have member functions def visit_casting_operator( self ): - self.__dependencies_manager.add_exported( self.curr_decl ) - + pass #c code doesn't have member functions def visit_free_function( self ): self.__dependencies_manager.add_exported( self.curr_decl ) self.curr_code_creator.adopt_creator( code_creators.function_definition_t( self.curr_decl ) ) @@ -208,11 +154,10 @@ def visit_class(self): self.__dependencies_manager.add_exported( self.curr_decl ) - if not self.curr_decl.opaque: - if self.curr_decl.calldefs( self.__should_generate_code, recursive=False, allow_empty=True ): - md_cc = code_creators.methods_definition_t( self.curr_decl ) - self.__class2methods_def[ self.curr_decl ] = md_cc - self.__class_defs_ccs.adopt_creator( md_cc ) + if self.curr_decl.opaque: + cls_intro_cc = self.__class2introduction[ self.curr_decl ] + cls_intro_cc.adopt_creator( code_creators.opaque_init_introduction_t( self.curr_decl ) ) + else: class_ = self.curr_decl for decl in self.curr_decl.decls( recursive=False, allow_empty=True ): if isinstance( decl, declarations.variable_t ): @@ -221,9 +166,6 @@ self.curr_decl = decl declarations.apply_visitor( self, decl ) self.curr_decl = class_ - else: - cls_intro_cc = self.__class2introduction[ self.curr_decl ] - cls_intro_cc.adopt_creator( code_creators.opaque_init_introduction_t( self.curr_decl ) ) def visit_enumeration(self): self.__dependencies_manager.add_exported( self.curr_decl ) Modified: pyplusplus_dev/unittests/ctypes_tester.py =================================================================== --- pyplusplus_dev/unittests/ctypes_tester.py 2009-08-08 19:53:41 UTC (rev 1747) +++ pyplusplus_dev/unittests/ctypes_tester.py 2009-08-08 19:57:28 UTC (rev 1748) @@ -77,43 +77,8 @@ return sys.modules[ self.base_name ] -class pof_tester_t( ctypes_base_tester_t ): - def __init__( self, *args, **keywd ): - ctypes_base_tester_t.__init__( self, 'pof', *args, **keywd ) - def test_constructors(self): - n0 = self.module_ref.pof.number_t() - self.failUnless( 0 == n0.get_value() ) - n1 = self.module_ref.pof.number_t( ctypes.c_long(32) ) - self.failUnless( 32 == n1.get_value() ) - n2 = self.module_ref.pof.number_t( ctypes.pointer(n1) ) - self.failUnless( 32 == n2.get_value() ) - def test_free_functions(self): - #the following code fails - difference in the calling conventions - #TODO: the following test failes, because of the wrong calling convention used - self.failUnless( self.module_ref.identity_cpp( int(111) ) == 111 ) - - def test_get_set_values( self ): - n0 = self.module_ref.pof.number_t() - n0.set_value( 1977 ) - self.failUnless( 1977 == n0.get_value() ) - - #the following functionality is still missing - #~ def test_operator_assign( self ): - #~ obj1 = number_t(1) - #~ obj2 = number_t(2) - #~ x = obj1.operator_assign( obj2 ) - #~ #there are special cases, where ctypes could introduce "optimized" behaviour and not create new python object - #~ self.failUnless( x is obj1 ) - #~ self.failUnless( obj1.m_value == obj2.m_value ) - - #~ def test_clone( self ): - #~ obj1 = number_t(1) - #~ obj2 = obj1.clone() - #~ self.fail( obj1.get_value() == obj2.get_value() ) - - class issues_tester_t( ctypes_base_tester_t ): def __init__( self, *args, **keywd ): ctypes_base_tester_t.__init__( self, 'issues', *args, **keywd ) @@ -208,16 +173,6 @@ def test(self): self.failUnless( 21 == self.module_ref.sum_ints( 3, 5,7,9) ) -class templates_tester_t( ctypes_base_tester_t ): - def __init__( self, *args, **keywd ): - ctypes_base_tester_t.__init__( self, 'templates', *args, **keywd ) - - def customize( self, mb ): - mb.class_( 'value_t<int>' ).alias = 'int_value_t' - - def test(self): - pass - class circular_references_tester_t( ctypes_base_tester_t ): def __init__( self, *args, **keywd ): ctypes_base_tester_t.__init__( self, 'circular_references', *args, **keywd ) @@ -236,17 +191,12 @@ def create_suite(): #part of this functionality is going to be deprecated suite = unittest.TestSuite() - return suite - #~ if 'win' in sys.platform: - #~ suite.addTest( unittest.makeSuite(pof_tester_t)) - #~ suite.addTest( unittest.makeSuite(issues_tester_t)) suite.addTest( unittest.makeSuite(enums_tester_t)) suite.addTest( unittest.makeSuite(opaque_tester_t)) suite.addTest( unittest.makeSuite(include_algorithm_tester_t)) suite.addTest( unittest.makeSuite(anonymous_tester_t)) suite.addTest( unittest.makeSuite(variables_tester_t)) suite.addTest( unittest.makeSuite(varargs_tester_t)) - suite.addTest( unittest.makeSuite(templates_tester_t)) suite.addTest( unittest.makeSuite(circular_references_tester_t)) return suite Modified: pyplusplus_dev/unittests/sconstruct =================================================================== --- pyplusplus_dev/unittests/sconstruct 2009-08-08 19:53:41 UTC (rev 1747) +++ pyplusplus_dev/unittests/sconstruct 2009-08-08 19:57:28 UTC (rev 1748) @@ -25,9 +25,7 @@ env.AppendUnique( CPPPATH=['#data'] ) -scripts = [ 'pof' - , 'issues' - , 'enums' +scripts = [ 'enums' , 'opaque' , 'include_algorithm' , 'anonymous' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-08 19:53:57
|
Revision: 1747 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1747&view=rev Author: roman_yakovenko Date: 2009-08-08 19:53:41 +0000 (Sat, 08 Aug 2009) Log Message: ----------- removing cpptypes testers Removed Paths: ------------- pyplusplus_dev/unittests/data/ctypes/issues/ pyplusplus_dev/unittests/data/ctypes/pof/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-08 19:00:59
|
Revision: 1746 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1746&view=rev Author: roman_yakovenko Date: 2009-08-08 19:00:48 +0000 (Sat, 08 Aug 2009) Log Message: ----------- making ctypes code generator treat right struct dependencies Modified Paths: -------------- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/pyplusplus/creators_factory/sort_algorithms.py Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-08-08 06:08:18 UTC (rev 1745) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-08-08 19:00:48 UTC (rev 1746) @@ -633,6 +633,9 @@ def __init__( self, *args, **keywd ): raise RuntimeError( "Unable to create instance of opaque type." ) +class __mpz_struct(ctypes.Structure): + """class __mpz_struct""" + class __gmp_randstate_struct(ctypes.Structure): """class __gmp_randstate_struct""" @@ -645,27 +648,12 @@ class __mpq_struct(ctypes.Structure): """class __mpq_struct""" -class __mpz_struct(ctypes.Structure): - """class __mpz_struct""" - -__mpq_struct._fields_ = [ #class __mpq_struct - ("_mp_num", __mpz_struct), - ("_mp_den", __mpz_struct), -] - __mpz_struct._fields_ = [ #class __mpz_struct ("_mp_alloc", ctypes.c_int), ("_mp_size", ctypes.c_int), ("_mp_d", ctypes.POINTER( ctypes.c_ulong )), ] -__mpf_struct._fields_ = [ #class __mpf_struct - ("_mp_prec", ctypes.c_int), - ("_mp_size", ctypes.c_int), - ("_mp_exp", ctypes.c_long), - ("_mp_d", ctypes.POINTER( ctypes.c_ulong )), -] - __gmp_randstate_struct._._fields_ = [ #class __gmp_randstate_struct ("_mp_lc", ctypes.c_void_p), ] @@ -677,6 +665,18 @@ ("_mp_algdata", __gmp_randstate_struct._), ] +__mpf_struct._fields_ = [ #class __mpf_struct + ("_mp_prec", ctypes.c_int), + ("_mp_size", ctypes.c_int), + ("_mp_exp", ctypes.c_long), + ("_mp_d", ctypes.POINTER( ctypes.c_ulong )), +] + +__mpq_struct._fields_ = [ #class __mpq_struct + ("_mp_num", __mpz_struct), + ("_mp_den", __mpz_struct), +] + gmpq_add_type = ctypes.CFUNCTYPE( None, ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ) ) gmpq_add = gmpq_add_type( ( libgmp_lib.undecorated_names["extern void __gmpq_add(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]"], libgmp_lib ) ) Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-08-08 06:08:18 UTC (rev 1745) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-08-08 19:00:48 UTC (rev 1746) @@ -70,29 +70,6 @@ return decl in self.__exported_decls return True - #~ def __prepare_decls( self, global_ns ): - #~ to_be_exposed = [] - #~ for decl in declarations.make_flatten( global_ns ): - #~ if decl.ignore: - #~ continue - - #~ if not decl.exportable: - #~ #leave only decls that user wants to export and that could be exported - #~ self.__print_readme( decl ) - #~ continue - - #~ if decl.already_exposed: - #~ #check wether this is already exposed in other module - #~ continue - - #~ if isinstance( decl.parent, declarations.namespace_t ): - #~ #leave only declarations defined under namespace, but remove namespaces - #~ to_be_exposed.append( decl ) - - #~ self.__print_readme( decl ) - - #~ return to_be_exposed - def __contains_exported( self, decl ): return bool( decl.decls( self.__should_generate_code, recursive=True, allow_empty=True ) ) @@ -104,10 +81,13 @@ self.__class2introduction[ class_ ] = ci_creator cc.adopt_creator( ci_creator ) classes = class_.classes( recursive=False, allow_empty=True) - classes = sort_algorithms.sort_classes( classes ) + classes = sort_algorithms.sort_classes( classes, include_vars=True ) for internal_class in classes: self.__add_class_introductions( ci_creator, internal_class ) + if not class_.opaque: + self.__class_defs_ccs.adopt_creator( code_creators.fields_definition_t( class_ ) ) + def create(self ): """ create and return the module for the extension - code creators tree root @@ -134,7 +114,7 @@ f = lambda cls: self.__should_generate_code( cls ) \ and isinstance( cls.parent, declarations.namespace_t ) ns_classes = self.global_ns.classes( f, recursive=True, allow_empty=True) - ns_classes = sort_algorithms.sort_classes( ns_classes ) + ns_classes = sort_algorithms.sort_classes( ns_classes, include_vars=True ) for class_ in ns_classes: self.__add_class_introductions( self.__class_ccs, class_ ) @@ -241,9 +221,6 @@ self.curr_decl = decl declarations.apply_visitor( self, decl ) self.curr_decl = class_ - #fields definition should be recursive using the visitor - #internal classes fields should be defined first - self.__class_defs_ccs.adopt_creator( code_creators.fields_definition_t( self.curr_decl ) ) else: cls_intro_cc = self.__class2introduction[ self.curr_decl ] cls_intro_cc.adopt_creator( code_creators.opaque_init_introduction_t( self.curr_decl ) ) Modified: pyplusplus_dev/pyplusplus/creators_factory/sort_algorithms.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/sort_algorithms.py 2009-08-08 06:08:18 UTC (rev 1745) +++ pyplusplus_dev/pyplusplus/creators_factory/sort_algorithms.py 2009-08-08 19:00:48 UTC (rev 1746) @@ -12,9 +12,10 @@ BLACK = 2 class class_organizer_t(object): - def __init__( self, decls ): + def __init__( self, decls, include_vars=False): object.__init__( self ) + self.__include_vars = include_vars self.__classes = filter( lambda x: isinstance( x, declarations.class_t ) , decls ) self.__classes.sort( lambda cls1, cls2: cmp( cls1.decl_string, cls2.decl_string ) ) @@ -66,6 +67,19 @@ if top_class_inst: i_depend_on_them.add( full_name( top_class_inst ) ) + if self.__include_vars: + vars = filter( lambda decl: isinstance( decl, declarations.variable_t ) + , declarations.make_flatten( class_ )) + for var in vars: + if declarations.is_pointer( var.type ): + continue + base_type = declarations.base_type( var.type ) + if not isinstance( base_type, declarations.declarated_t ): + continue + top_class_inst = self.__get_top_class_inst( base_type.declaration ) + if top_class_inst: + i_depend_on_them.add( full_name( top_class_inst ) ) + for internal_cls in class_.classes(allow_empty=True): internal_cls_dependencies = self.__find_out_class_dependencies( internal_cls ) i_depend_on_them.update( internal_cls_dependencies ) @@ -170,8 +184,8 @@ result = self.__join_groups(groups) return result -def sort_classes( classes ): - organizer = class_organizer_t( classes ) +def sort_classes( classes, include_vars=False ): + organizer = class_organizer_t( classes, include_vars=include_vars ) return organizer.desired_order() def sort_calldefs( decls ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-08 06:08:24
|
Revision: 1745 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1745&view=rev Author: roman_yakovenko Date: 2009-08-08 06:08:18 +0000 (Sat, 08 Aug 2009) Log Message: ----------- remove warning Modified Paths: -------------- pygccxml_dev/pygccxml/parser/scanner.py Modified: pygccxml_dev/pygccxml/parser/scanner.py =================================================================== --- pygccxml_dev/pygccxml/parser/scanner.py 2009-08-08 06:07:29 UTC (rev 1744) +++ pygccxml_dev/pygccxml/parser/scanner.py 2009-08-08 06:08:18 UTC (rev 1745) @@ -339,8 +339,10 @@ size = self.__guess_int_value( attrs.get(XML_AN_MAX, '' ) ) if size is None: size = array_t.SIZE_UNKNOWN - msg = 'unable to find out array size from expression "%s"' % attrs[ XML_AN_MAX ] - warnings.warn( msg ) + #The following warning is pretty useless, as it cant say what the + #problematic declaration is. + #msg = 'unable to find out array size from expression "%s"' % attrs[ XML_AN_MAX ] + #warnings.warn( msg ) return array_t( type_, size + 1 ) def __read_cv_qualified_type( self, attrs ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-08 06:07:37
|
Revision: 1744 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1744&view=rev Author: roman_yakovenko Date: 2009-08-08 06:07:29 +0000 (Sat, 08 Aug 2009) Log Message: ----------- replace popen with subprocess Modified Paths: -------------- pygccxml_dev/pygccxml/parser/source_reader.py Modified: pygccxml_dev/pygccxml/parser/source_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/source_reader.py 2009-08-06 21:30:35 UTC (rev 1743) +++ pygccxml_dev/pygccxml/parser/source_reader.py 2009-08-08 06:07:29 UTC (rev 1744) @@ -8,6 +8,7 @@ import linker import config import patcher +import subprocess import pygccxml.utils try: #select the faster xml parser @@ -148,16 +149,25 @@ if not os.path.isabs( ffname ): ffname = self.__file_full_name(header) command_line = self.__create_command_line( ffname, gccxml_file ) - input_, output = os.popen4( command_line ) - input_.close() + + process = subprocess.Popen( args=command_line + , shell=True + , stdin=subprocess.PIPE + , stdout=subprocess.PIPE + , stderr=subprocess.STDOUT ) + process.stdin.close() + gccxml_reports = [] - while True: - data = output.readline() - gccxml_reports.append( data ) - if not data: - break - exit_status = output.close() - gccxml_msg = ''.join(gccxml_reports) + while process.poll() is None: + line = process.stdout.readline() + if line.strip(): + gccxml_reports.append( line.rstrip() ) + for line in process.stdout.readlines(): + if line.strip(): + gccxml_reports.append( line.rstrip() ) + + exit_status = process.returncode + gccxml_msg = os.linesep.join(gccxml_reports) if self.__config.ignore_gccxml_output: if not os.path.isfile(gccxml_file): raise gccxml_runtime_error_t( "Error occured while running GCC-XML: %s status:%s" % (gccxml_msg, exit_status) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-06 21:30:43
|
Revision: 1743 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1743&view=rev Author: roman_yakovenko Date: 2009-08-06 21:30:35 +0000 (Thu, 06 Aug 2009) Log Message: ----------- cleaning ctypes builder Modified Paths: -------------- pyplusplus_dev/examples/gmplib_dev/dev/project_env.py pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/calldef_ctypes.py Modified: pyplusplus_dev/examples/gmplib_dev/dev/project_env.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/dev/project_env.py 2009-08-05 20:25:05 UTC (rev 1742) +++ pyplusplus_dev/examples/gmplib_dev/dev/project_env.py 2009-08-06 21:30:35 UTC (rev 1743) @@ -6,6 +6,6 @@ class gmp: header_file = '/usr/include/gmp.h' - symbols_file = '/usr/lib/libgmp.so.3.4.2' - shared_library_file = '/usr/lib/libgmp.so.3.4.2' + symbols_file = '/usr/lib/libgmp.so.3.4.4' + shared_library_file = '/usr/lib/libgmp.so.3.4.4' generated_code_dir = complete_path( 'pyplusplus_dev', 'examples', 'gmplib_dev', 'pygmplib' ) Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-08-05 20:25:05 UTC (rev 1742) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-08-06 21:30:35 UTC (rev 1743) @@ -4,90 +4,85 @@ import ctypes_utils -libgmp_lib = ctypes.CDLL( r"/usr/lib/libgmp.so.3.4.2" ) +libgmp_lib = ctypes.CDLL( r"/usr/lib/libgmp.so.3.4.4" ) libgmp_lib.undecorated_names = {#mapping between decorated and undecorated names "extern double __gmpf_get_d(mpf_srcptr arg0) [free function]" : "__gmpf_get_d", "extern int __gmpf_cmp_ui(mpf_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpf_cmp_ui", - "extern void __gmpz_mul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_mul_ui", + "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fac_ui", "extern void __gmpz_and(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_and", "extern void __gmpf_urandomb(__mpf_struct * arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpf_urandomb", - "extern void __gmpz_fib2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fib2_ui", + "extern mp_limb_t __gmpn_mul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_mul_1", "extern void __gmpz_mul_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_mul_2exp", "extern void __gmpz_clrbit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_clrbit", "extern void __gmpz_cdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_r_2exp", - "extern int __gmpz_init_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpz_init_set_str", + "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_lcm", "extern void __gmpz_gcd(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_gcd", - "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpq_set_ui", - "extern int __gmpz_cmp_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_cmp_si", + "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_divisible_2exp_p", "extern int __gmpz_congruent_2exp_p(mpz_srcptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_congruent_2exp_p", "extern void __gmpz_pow_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_pow_ui", "void __gmpq_neg(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpq_neg", "extern void __gmpz_import(mpz_ptr arg0, size_t arg1, int arg2, size_t arg3, int arg4, size_t arg5, void const * arg6) [free function]" : "__gmpz_import", - "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fac_ui", + "extern long unsigned int __gmpz_fdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fdiv_ui", "extern int __gmpz_root(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_root", "extern void __gmpz_fdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_fdiv_q", - "extern void __gmpq_div_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_div_2exp", + "extern void __gmpz_fdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_fdiv_r", "extern size_t __gmpq_inp_str(mpq_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpq_inp_str", "extern int __gmpz_ui_kronecker(long unsigned int arg0, mpz_srcptr arg1) [free function]" : "__gmpz_ui_kronecker", - "extern long unsigned int __gmpz_cdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_r_ui", "extern long unsigned int __gmpz_remove(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_remove", - "extern void __gmpz_realloc2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_realloc2", + "extern int __gmpz_tstbit(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tstbit", "extern void __gmpn_tdiv_qr(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, mp_srcptr arg5, mp_size_t arg6) [free function]" : "__gmpn_tdiv_qr", "extern void __gmpz_fdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_r_2exp", "extern void __gmpf_div(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_div", "extern void __gmpq_div(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_div", - "extern long unsigned int __gmpf_get_default_prec() [free function]" : "__gmpf_get_default_prec", + "extern void __gmpz_ui_pow_ui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_ui_pow_ui", "extern void __gmpq_sub(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_sub", "extern void __gmpf_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_ui", - "mp_limb_t __gmpn_add_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_add_1", + "extern mp_limb_t __gmpn_lshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]" : "__gmpn_lshift", "extern void __gmpz_add(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_add", "extern void __gmpf_trunc(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_trunc", "extern void __gmpz_divexact_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_divexact_ui", "extern long unsigned int __gmpz_gcd_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_gcd_ui", - "extern size_t __gmpz_out_raw(FILE * arg0, mpz_srcptr arg1) [free function]" : "__gmpz_out_raw", - "mp_limb_t __gmpn_sub(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_sub", + "extern void __gmpz_cdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_cdiv_r", + "extern size_t __gmpz_inp_str(mpz_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpz_inp_str", + "extern double __gmpq_get_d(mpq_srcptr arg0) [free function]" : "__gmpq_get_d", + "extern int __gmp_sprintf(char * arg0, char const * arg1, ...) [free function]" : "__gmp_sprintf", "extern void __gmpn_random2(mp_ptr arg0, mp_size_t arg1) [free function]" : "__gmpn_random2", "extern void __gmpz_cdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_q_2exp", "extern int __gmpf_eq(mpf_srcptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_eq", "extern mp_limb_t __gmpn_divrem(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4, mp_size_t arg5) [free function]" : "__gmpn_divrem", "extern void __gmpz_cdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_cdiv_q", - "extern void __gmpz_init_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_init_set", + "void __gmpz_abs(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]" : "__gmpz_abs", "extern void __gmpz_xor(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_xor", - "extern void __gmpz_sqrt(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_sqrt", "extern void __gmpz_init_set_d(mpz_ptr arg0, double arg1) [free function]" : "__gmpz_init_set_d", "int __gmpz_fits_ushort_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_ushort_p", - "extern void __gmpz_sub(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sub", + "extern void __gmpq_set_f(mpq_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpq_set_f", "extern int __gmpf_fits_ulong_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_ulong_p", - "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]" : "__gmpf_random2", "long unsigned int __gmpz_get_ui(mpz_srcptr __gmp_z) [free function]" : "__gmpz_get_ui", + "extern int __gmpz_cmpabs_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmpabs_ui", "extern long unsigned int __gmp_urandomm_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_urandomm_ui", "int __gmpz_perfect_square_p(mpz_srcptr __gmp_a) [free function]" : "__gmpz_perfect_square_p", - "extern size_t __gmpn_get_str(unsigned char * arg0, int arg1, mp_ptr arg2, mp_size_t arg3) [free function]" : "__gmpn_get_str", + "extern void __gmpq_set_d(mpq_ptr arg0, double arg1) [free function]" : "__gmpq_set_d", "extern int __gmpz_cmp_d(mpz_srcptr arg0, double arg1) [free function]" : "__gmpz_cmp_d", "extern void __gmpz_cdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_cdiv_qr", "extern void __gmpf_add(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_add", "extern int __gmpz_probab_prime_p(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_probab_prime_p", "extern mp_limb_t __gmpn_rshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]" : "__gmpn_rshift", "extern void __gmpz_array_init(mpz_ptr arg0, mp_size_t arg1, mp_size_t arg2) [free function]" : "__gmpz_array_init", - "int __gmpz_fits_uint_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_uint_p", - "extern void __gmpz_bin_uiui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_bin_uiui", - "extern long unsigned int __gmpz_tdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_ui", + "extern long unsigned int __gmpf_get_default_prec() [free function]" : "__gmpf_get_default_prec", + "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]" : "__gmpf_random2", "extern void __gmp_randinit_set(__gmp_randstate_struct * arg0, __gmp_randstate_struct const * arg1) [free function]" : "__gmp_randinit_set", - "extern long unsigned int __gmpz_tdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tdiv_ui", "extern void __gmpq_inv(mpq_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_inv", "extern mp_size_t __gmpn_set_str(mp_ptr arg0, unsigned char const * arg1, size_t arg2, int arg3) [free function]" : "__gmpn_set_str", - "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_lcm", - "extern long unsigned int __gmpn_scan0(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan0", - "extern long unsigned int __gmpn_scan1(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan1", + "extern void __gmp_randinit(__gmp_randstate_struct * arg0, gmp_randalg_t arg1, ...) [free function]" : "__gmp_randinit", + "extern mp_size_t __gmpn_sqrtrem(mp_ptr arg0, mp_ptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_sqrtrem", "extern long unsigned int __gmpz_fdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_fdiv_qr_ui", "extern void __gmpf_init_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_init_set_ui", "extern void __gmpn_mul_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_mul_n", "extern int __gmpq_cmp_ui(mpq_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpq_cmp_ui", "extern void __gmpz_mul_si(mpz_ptr arg0, mpz_srcptr arg1, long int arg2) [free function]" : "__gmpz_mul_si", "extern void __gmpq_set_si(mpq_ptr arg0, long int arg1, long unsigned int arg2) [free function]" : "__gmpq_set_si", - "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_divisible_2exp_p", - "mp_limb_t __gmpn_add(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_add", + "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpq_set_ui", "extern void __gmpf_sqrt_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_sqrt_ui", "extern void __gmpz_init_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_init_set_ui", "extern int __gmpz_divisible_ui_p(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_divisible_ui_p", @@ -96,101 +91,112 @@ "extern void __gmpz_sub_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_sub_ui", "extern void __gmpz_divexact(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_divexact", "extern void __gmpz_com(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_com", - "extern void __gmpz_ui_sub(mpz_ptr arg0, long unsigned int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ui_sub", + "extern void __gmpz_ior(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ior", + "extern void __gmpz_init_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_init_set", + "extern long unsigned int __gmpz_cdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_q_ui", "extern void __gmpz_submul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_submul", "extern int __gmp_asprintf(char * * arg0, char const * arg1, ...) [free function]" : "__gmp_asprintf", "__gmp_bits_per_limb [variable]" : "__gmp_bits_per_limb", - "extern void __gmpz_tdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_2exp", - "extern void __gmpq_get_num(mpz_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_get_num", + "extern int __gmp_scanf(char const * arg0, ...) [free function]" : "__gmp_scanf", + "extern void __gmpf_set_prec(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_prec", + "extern int __gmpz_init_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpz_init_set_str", + "mp_limb_t __gmpn_sub_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_sub_1", "extern int __gmpz_millerrabin(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_millerrabin", "extern void __gmpz_mod(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_mod", + "extern int __gmpz_invert(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_invert", "extern void __gmpf_set_d(mpf_ptr arg0, double arg1) [free function]" : "__gmpf_set_d", "extern int __gmpf_fits_uint_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_uint_p", "extern mp_limb_t __gmpn_addmul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_addmul_1", "extern void __gmpf_set_z(mpf_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpf_set_z", - "extern void __gmpz_ui_pow_ui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_ui_pow_ui", + "extern void __gmpz_ui_sub(mpz_ptr arg0, long unsigned int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ui_sub", "extern double __gmpz_get_d(mpz_srcptr arg0) [free function]" : "__gmpz_get_d", "extern void __gmpf_set_prec_raw(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_prec_raw", "extern int __gmpf_cmp(mpf_srcptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_cmp", "extern void __gmpz_lucnum_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_lucnum_ui", "extern void __gmpf_set_q(mpf_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpf_set_q", - "extern long unsigned int __gmpz_fdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fdiv_ui", + "extern mp_limb_t __gmpn_gcd_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]" : "__gmpn_gcd_1", "extern void __gmpz_tdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_tdiv_qr", - "extern mp_size_t __gmpn_sqrtrem(mp_ptr arg0, mp_ptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_sqrtrem", "extern int __gmpq_set_str(mpq_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpq_set_str", "extern int __gmpf_fits_slong_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_slong_p", "extern void __gmpz_setbit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_setbit", "extern void __gmp_randinit_lc_2exp(__gmp_randstate_struct * arg0, mpz_srcptr arg1, long unsigned int arg2, long unsigned int arg3) [free function]" : "__gmp_randinit_lc_2exp", "extern int __gmp_randinit_lc_2exp_size(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_randinit_lc_2exp_size", - "extern void __gmpz_set_d(mpz_ptr arg0, double arg1) [free function]" : "__gmpz_set_d", + "extern int __gmpf_cmp_si(mpf_srcptr arg0, long int arg1) [free function]" : "__gmpf_cmp_si", "extern void __gmp_randclear(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randclear", "extern void __gmpz_set_f(mpz_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpz_set_f", "extern size_t __gmpf_out_str(FILE * arg0, int arg1, size_t arg2, mpf_srcptr arg3) [free function]" : "__gmpf_out_str", "extern int __gmpf_fits_sshort_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_sshort_p", + "extern void __gmpq_div_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_div_2exp", "extern long unsigned int __gmpf_get_prec(mpf_srcptr arg0) [free function]" : "__gmpf_get_prec", - "extern int __gmp_scanf(char const * arg0, ...) [free function]" : "__gmp_scanf", - "extern void __gmpf_floor(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_floor", + "extern void __gmpq_init(mpq_ptr arg0) [free function]" : "__gmpq_init", + "extern int __gmpz_kronecker_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_kronecker_si", + "extern int __gmpz_fits_sint_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_sint_p", "extern int __gmp_snprintf(char * arg0, size_t arg1, char const * arg2, ...) [free function]" : "__gmp_snprintf", "extern void __gmpz_powm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_powm", "extern long unsigned int __gmpz_hamdist(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_hamdist", "extern void __gmpz_fib_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fib_ui", - "extern void __gmpf_set_default_prec(long unsigned int arg0) [free function]" : "__gmpf_set_default_prec", - "extern int __gmpq_cmp(mpq_srcptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_cmp", + "extern int __gmpz_cmp_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmp_ui", + "extern mp_limb_t __gmpn_submul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_submul_1", "extern void __gmpf_init2(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_init2", - "extern size_t __gmpz_inp_raw(mpz_ptr arg0, FILE * arg1) [free function]" : "__gmpz_inp_raw", + "extern int __gmpz_cmpabs(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_cmpabs", + "extern long unsigned int __gmpz_tdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_q_ui", "extern mp_limb_t __gmpn_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]" : "__gmpn_mod_1", "size_t __gmpz_size(mpz_srcptr __gmp_z) [free function]" : "__gmpz_size", "extern void __gmpq_get_den(mpz_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_get_den", - "extern void __gmpq_set_num(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_num", - "extern int __gmpz_congruent_p(mpz_srcptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_congruent_p", - "extern mp_limb_t __gmpn_gcd_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]" : "__gmpn_gcd_1", - "extern void __gmp_randinit(__gmp_randstate_struct * arg0, gmp_randalg_t arg1, ...) [free function]" : "__gmp_randinit", + "extern mp_limb_t __gmpn_preinv_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_preinv_mod_1", + "extern long unsigned int __gmpz_tdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tdiv_ui", + "int __gmpz_fits_uint_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_uint_p", "extern void __gmpf_init(mpf_ptr arg0) [free function]" : "__gmpf_init", "extern double __gmpf_get_d_2exp(long int * arg0, mpf_srcptr arg1) [free function]" : "__gmpf_get_d_2exp", "extern void __gmpz_mul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_mul", "extern void __gmpq_add(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_add", "extern void __gmpq_set(mpq_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_set", - "extern int __gmpz_fits_sint_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_sint_p", - "extern long unsigned int __gmpz_cdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_cdiv_qr_ui", - "extern void __gmpz_clear(mpz_ptr arg0) [free function]" : "__gmpz_clear", - "extern mp_limb_t __gmpn_mul(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4) [free function]" : "__gmpn_mul", + "extern long unsigned int __gmpn_scan0(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan0", + "mp_limb_t __gmpn_sub(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_sub", + "extern void __gmpz_fdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_q_2exp", + "extern void __gmpz_sqrtrem(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sqrtrem", "extern void __gmpz_init_set_si(mpz_ptr arg0, long int arg1) [free function]" : "__gmpz_init_set_si", "extern int __gmpz_divisible_p(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_divisible_p", "__gmp_errno [variable]" : "__gmp_errno", - "extern void __gmpf_sub_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_sub_ui", - "extern int __gmpf_cmp_si(mpf_srcptr arg0, long int arg1) [free function]" : "__gmpf_cmp_si", + "extern void __gmpf_pow_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_pow_ui", + "extern void __gmpz_swap(mpz_ptr arg0, mpz_ptr arg1) [free function]" : "__gmpz_swap", "extern int __gmpz_cmp(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_cmp", "extern void __gmpf_init_set_si(mpf_ptr arg0, long int arg1) [free function]" : "__gmpf_init_set_si", - "extern mp_limb_t __gmpn_lshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]" : "__gmpn_lshift", + "extern long unsigned int __gmpz_tdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_ui", "extern int __gmpq_cmp_si(mpq_srcptr arg0, long int arg1, long unsigned int arg2) [free function]" : "__gmpq_cmp_si", "extern int __gmp_fprintf(FILE * arg0, char const * arg1, ...) [free function]" : "__gmp_fprintf", - "extern void __gmpf_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_set", "extern int __gmpf_fits_sint_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_sint_p", "extern int __gmpf_cmp_d(mpf_srcptr arg0, double arg1) [free function]" : "__gmpf_cmp_d", - "extern mp_limb_t __gmpn_divexact_by3c(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_divexact_by3c", "extern char * __gmpf_get_str(char * arg0, mp_exp_t * arg1, int arg2, size_t arg3, mpf_srcptr arg4) [free function]" : "__gmpf_get_str", "extern long unsigned int __gmpz_fdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_q_ui", "extern void __gmpz_urandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpz_urandomb", "extern char * __gmpz_get_str(char * arg0, int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_get_str", "extern void __gmpz_tdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_tdiv_r", "extern void __gmpz_urandomm(mpz_ptr arg0, __gmp_randstate_struct * arg1, mpz_srcptr arg2) [free function]" : "__gmpz_urandomm", - "extern int __gmpz_invert(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_invert", - "mp_limb_t __gmpn_sub_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_sub_1", + "extern void __gmpq_mul(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_mul", + "extern void __gmpz_tdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_tdiv_q", "extern void __gmpf_sub(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_sub", - "extern void __gmpz_swap(mpz_ptr arg0, mpz_ptr arg1) [free function]" : "__gmpz_swap", + "extern void __gmpz_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_set_ui", + "extern void __gmpz_random(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_random", "extern long unsigned int __gmp_urandomb_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_urandomb_ui", - "extern void __gmpz_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_set_ui", + "extern void __gmpf_floor(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_floor", "extern char * __gmpq_get_str(char * arg0, int arg1, mpq_srcptr arg2) [free function]" : "__gmpq_get_str", "extern int __gmpn_perfect_square_p(mp_srcptr arg0, mp_size_t arg1) [free function]" : "__gmpn_perfect_square_p", "extern void __gmpz_addmul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_addmul", - "extern int __gmp_sprintf(char * arg0, char const * arg1, ...) [free function]" : "__gmp_sprintf", + "extern int __gmpq_cmp(mpq_srcptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_cmp", + "extern void __gmpz_bin_uiui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_bin_uiui", "void __gmpz_set_q(mpz_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpz_set_q", + "extern int __gmpz_congruent_ui_p(mpz_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_congruent_ui_p", "extern void __gmpf_neg(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_neg", "extern void __gmp_randseed(__gmp_randstate_struct * arg0, mpz_srcptr arg1) [free function]" : "__gmp_randseed", - "extern long unsigned int __gmpz_scan1(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_scan1", + "extern void __gmpz_mul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_mul_ui", + "extern void __gmpz_init2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_init2", "extern void __gmpz_nextprime(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_nextprime", + "extern void __gmpz_set_d(mpz_ptr arg0, double arg1) [free function]" : "__gmpz_set_d", + "extern size_t __gmpz_inp_raw(mpz_ptr arg0, FILE * arg1) [free function]" : "__gmpz_inp_raw", + "extern void __gmpz_rrandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpz_rrandomb", + "extern long unsigned int __gmpz_cdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cdiv_ui", "extern int __gmpz_si_kronecker(long int arg0, mpz_srcptr arg1) [free function]" : "__gmpz_si_kronecker", - "extern void __gmpf_mul_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_2exp", "extern mp_limb_t __gmpn_divrem_2(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4) [free function]" : "__gmpn_divrem_2", "extern void __gmp_randseed_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_randseed_ui", "extern int __gmpz_kronecker_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_kronecker_ui", @@ -199,18 +205,16 @@ "extern void __gmpz_tdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_q_2exp", "extern size_t __gmpf_size(mpf_srcptr arg0) [free function]" : "__gmpf_size", "extern void __gmpf_swap(mpf_ptr arg0, mpf_ptr arg1) [free function]" : "__gmpf_swap", - "int __gmpn_cmp(mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) [free function]" : "__gmpn_cmp", - "extern void __gmpf_mul_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_ui", + "extern mp_limb_t __gmpn_divrem_1(mp_ptr arg0, mp_size_t arg1, mp_srcptr arg2, mp_size_t arg3, mp_limb_t arg4) [free function]" : "__gmpn_divrem_1", "extern void __gmpq_canonicalize(mpq_ptr arg0) [free function]" : "__gmpq_canonicalize", "long unsigned int __gmpz_popcount(mpz_srcptr __gmp_u) [free function]" : "__gmpz_popcount", "extern void __gmpf_ui_sub(mpf_ptr arg0, long unsigned int arg1, mpf_srcptr arg2) [free function]" : "__gmpf_ui_sub", - "extern void __gmpq_mul_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_mul_2exp", - "extern void __gmpq_mul(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_mul", + "extern int __gmpz_cmp_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_cmp_si", "extern int __gmpz_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpz_set_str", - "extern int __gmpz_tstbit(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tstbit", + "extern void __gmpz_realloc2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_realloc2", "extern void __gmpz_set_si(mpz_ptr arg0, long int arg1) [free function]" : "__gmpz_set_si", - "extern void __gmpq_init(mpq_ptr arg0) [free function]" : "__gmpq_init", - "extern size_t __gmpz_inp_str(mpz_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpz_inp_str", + "int __gmpn_cmp(mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) [free function]" : "__gmpn_cmp", + "extern size_t __gmpz_out_raw(FILE * arg0, mpz_srcptr arg1) [free function]" : "__gmpz_out_raw", "extern int __gmp_sscanf(char const * arg0, char const * arg1, ...) [free function]" : "__gmp_sscanf", "extern int __gmpz_cmpabs_d(mpz_srcptr arg0, double arg1) [free function]" : "__gmpz_cmpabs_d", "extern void * __gmpz_export(void * arg0, size_t * arg1, int arg2, size_t arg3, int arg4, size_t arg5, mpz_srcptr arg6) [free function]" : "__gmpz_export", @@ -221,76 +225,71 @@ "extern size_t __gmpz_sizeinbase(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_sizeinbase", "extern long unsigned int __gmpz_fdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_r_ui", "extern void __gmp_randinit_default(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randinit_default", - "mp_limb_t __gmpz_getlimbn(mpz_srcptr __gmp_z, mp_size_t __gmp_n) [free function]" : "__gmpz_getlimbn", "extern long int __gmpf_get_si(mpf_srcptr arg0) [free function]" : "__gmpf_get_si", "extern void __gmpz_init(mpz_ptr arg0) [free function]" : "__gmpz_init", "extern void __gmpf_div_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_div_2exp", - "extern void __gmpz_random(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_random", - "extern void __gmpz_tdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_tdiv_q", - "extern void __gmpz_ior(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ior", "extern void __gmpf_set_si(mpf_ptr arg0, long int arg1) [free function]" : "__gmpf_set_si", "extern int __gmpq_equal(mpq_srcptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_equal", - "extern void __gmpz_rrandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpz_rrandomb", + "extern void __gmpq_set_num(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_num", "extern void * __gmpz_realloc(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_realloc", - "extern long unsigned int __gmpz_tdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_q_ui", "extern long unsigned int __gmpz_scan0(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_scan0", - "extern void __gmpz_init2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_init2", + "extern long unsigned int __gmpz_scan1(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_scan1", "extern void __gmpz_random2(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_random2", "extern mp_size_t __gmpn_pow_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3, mp_ptr arg4) [free function]" : "__gmpn_pow_1", - "extern long unsigned int __gmpz_cdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cdiv_ui", - "extern double __gmpq_get_d(mpq_srcptr arg0) [free function]" : "__gmpq_get_d", + "extern void __gmpf_mul_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_2exp", + "extern long unsigned int __gmpn_scan1(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan1", "extern int __gmpz_fits_slong_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_slong_p", "extern void __gmpf_mul(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_mul", - "extern void __gmpz_fdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_fdiv_r", "extern void __gmpf_div_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_div_ui", - "int __gmpz_fits_ulong_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_ulong_p", + "extern long unsigned int __gmpn_popcount(mp_srcptr arg0, mp_size_t arg1) [free function]" : "__gmpn_popcount", "extern int __gmpz_fits_sshort_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_sshort_p", "extern mp_limb_t __gmpn_sub_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_sub_n", - "extern int __gmpz_cmpabs(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_cmpabs", - "extern void __gmpz_powm_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2, mpz_srcptr arg3) [free function]" : "__gmpz_powm_ui", + "mp_limb_t __gmpz_getlimbn(mpz_srcptr __gmp_z, mp_size_t __gmp_n) [free function]" : "__gmpz_getlimbn", + "extern void __gmpq_mul_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_mul_2exp", "extern size_t __gmpq_out_str(FILE * arg0, int arg1, mpq_srcptr arg2) [free function]" : "__gmpq_out_str", "void __gmpz_neg(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]" : "__gmpz_neg", - "extern void __gmpz_sqrtrem(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sqrtrem", "extern long unsigned int __gmpz_tdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_tdiv_qr_ui", "extern mp_limb_t __gmpn_bdivmod(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, long unsigned int arg5) [free function]" : "__gmpn_bdivmod", - "extern void __gmpn_random(mp_ptr arg0, mp_size_t arg1) [free function]" : "__gmpn_random", + "extern void __gmpz_powm_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2, mpz_srcptr arg3) [free function]" : "__gmpz_powm_ui", "extern void __gmpq_set_z(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_z", "extern void __gmpz_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_set", + "extern void __gmpz_tdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_2exp", "extern long int __gmpz_get_si(mpz_srcptr arg0) [free function]" : "__gmpz_get_si", "extern void __gmpf_init_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_init_set", "extern void __gmpf_init_set_d(mpf_ptr arg0, double arg1) [free function]" : "__gmpf_init_set_d", "extern void __gmpf_reldiff(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_reldiff", - "extern int __gmpz_cmpabs_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmpabs_ui", - "extern long unsigned int __gmpn_popcount(mp_srcptr arg0, mp_size_t arg1) [free function]" : "__gmpn_popcount", + "extern long unsigned int __gmpz_cdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_r_ui", + "extern void __gmpz_sqrt(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_sqrt", "extern long unsigned int __gmpf_get_ui(mpf_srcptr arg0) [free function]" : "__gmpf_get_ui", - "extern mp_limb_t __gmpn_submul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_submul_1", + "mp_limb_t __gmpn_add_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_add_1", "extern void __gmp_set_memory_functions(void * (*)( ::size_t ) * arg0, void * (*)( void *,::size_t,::size_t ) * arg1, void (*)( void *,::size_t ) * arg2) [free function]" : "__gmp_set_memory_functions", - "void __gmpz_abs(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]" : "__gmpz_abs", + "extern void __gmpz_fib2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fib2_ui", "extern int __gmp_printf(char const * arg0, ...) [free function]" : "__gmp_printf", - "extern void __gmpq_set_f(mpq_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpq_set_f", + "extern void __gmpz_sub(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sub", "extern void __gmpf_clear(mpf_ptr arg0) [free function]" : "__gmpf_clear", - "extern void __gmpq_set_d(mpq_ptr arg0, double arg1) [free function]" : "__gmpq_set_d", + "extern size_t __gmpn_get_str(unsigned char * arg0, int arg1, mp_ptr arg2, mp_size_t arg3) [free function]" : "__gmpn_get_str", "extern int __gmp_fscanf(FILE * arg0, char const * arg1, ...) [free function]" : "__gmp_fscanf", - "extern mp_limb_t __gmpn_mul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_mul_1", - "extern void __gmpz_cdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_cdiv_r", + "mp_limb_t __gmpn_add(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_add", + "extern long unsigned int __gmpz_cdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_cdiv_qr_ui", "extern void __gmpz_bin_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_bin_ui", - "extern mp_limb_t __gmpn_divrem_1(mp_ptr arg0, mp_size_t arg1, mp_srcptr arg2, mp_size_t arg3, mp_limb_t arg4) [free function]" : "__gmpn_divrem_1", - "extern void __gmpz_fdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_q_2exp", + "extern mp_size_t __gmpn_gcd(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_ptr arg3, mp_size_t arg4) [free function]" : "__gmpn_gcd", + "extern void __gmpz_clear(mpz_ptr arg0) [free function]" : "__gmpz_clear", "extern void __gmpf_dump(mpf_srcptr arg0) [free function]" : "__gmpf_dump", "extern void __gmp_randinit_mt(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randinit_mt", "extern void __gmpz_submul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_submul_ui", - "extern long unsigned int __gmpz_cdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_q_ui", + "extern mp_limb_t __gmpn_divexact_by3c(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_divexact_by3c", "extern void __gmpz_dump(mpz_srcptr arg0) [free function]" : "__gmpz_dump", "extern int __gmpz_jacobi(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_jacobi", "__gmp_version [variable]" : "__gmp_version", "extern int __gmpf_integer_p(mpf_srcptr arg0) [free function]" : "__gmpf_integer_p", - "extern int __gmpz_cmp_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmp_ui", - "extern int __gmpz_kronecker_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_kronecker_si", - "extern void __gmpf_pow_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_pow_ui", + "extern void __gmpf_set_default_prec(long unsigned int arg0) [free function]" : "__gmpf_set_default_prec", + "extern int __gmpz_congruent_p(mpz_srcptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_congruent_p", + "extern void __gmpn_random(mp_ptr arg0, mp_size_t arg1) [free function]" : "__gmpn_random", + "extern void __gmpf_sub_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_sub_ui", "extern void __gmpz_lcm_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_lcm_ui", "extern void __gmpz_rootrem(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_rootrem", "extern void __gmpz_lucnum2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]" : "__gmpz_lucnum2_ui", - "extern int __gmpz_perfect_power_p(mpz_srcptr arg0) [free function]" : "__gmpz_perfect_power_p", + "extern void __gmpf_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_set", "void __gmpq_abs(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpq_abs", "extern long unsigned int __gmpn_hamdist(mp_srcptr arg0, mp_srcptr arg1, mp_size_t arg2) [free function]" : "__gmpn_hamdist", "extern int __gmpf_fits_ushort_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_ushort_p", @@ -299,99 +298,95 @@ "extern void __gmpf_abs(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_abs", "extern void __gmp_get_memory_functions(void * (*)( ::size_t ) * * arg0, void * (*)( void *,::size_t,::size_t ) * * arg1, void (*)( void *,::size_t ) * * arg2) [free function]" : "__gmp_get_memory_functions", "extern void __gmpf_ui_div(mpf_ptr arg0, long unsigned int arg1, mpf_srcptr arg2) [free function]" : "__gmpf_ui_div", - "extern mp_size_t __gmpn_gcd(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_ptr arg3, mp_size_t arg4) [free function]" : "__gmpn_gcd", + "extern void __gmpq_get_num(mpz_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_get_num", "extern mp_limb_t __gmpn_add_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_add_n", - "extern mp_limb_t __gmpn_preinv_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_preinv_mod_1", - "extern int __gmpz_congruent_ui_p(mpz_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_congruent_ui_p", + "extern mp_limb_t __gmpn_mul(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4) [free function]" : "__gmpn_mul", + "extern int __gmpz_perfect_power_p(mpz_srcptr arg0) [free function]" : "__gmpz_perfect_power_p", + "int __gmpz_fits_ulong_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_ulong_p", "extern void __gmpq_clear(mpq_ptr arg0) [free function]" : "__gmpq_clear", "extern void __gmpf_ceil(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_ceil", "extern void __gmpz_fdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_fdiv_qr", - "extern void __gmpf_set_prec(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_prec", + "extern void __gmpf_mul_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_ui", "extern void __gmpz_combit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_combit", "extern void __gmpz_addmul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_addmul_ui", "extern size_t __gmpf_inp_str(mpf_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpf_inp_str", "extern int __gmpf_init_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpf_init_set_str", "__gmpf_get_d" : "extern double __gmpf_get_d(mpf_srcptr arg0) [free function]", "__gmpf_cmp_ui" : "extern int __gmpf_cmp_ui(mpf_srcptr arg0, long unsigned int arg1) [free function]", - "__gmpz_mul_ui" : "extern void __gmpz_mul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_fac_ui" : "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", "__gmpz_and" : "extern void __gmpz_and(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", "__gmpf_urandomb" : "extern void __gmpf_urandomb(__mpf_struct * arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]", - "__gmpz_fib2_ui" : "extern void __gmpz_fib2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]", + "__gmpn_mul_1" : "extern mp_limb_t __gmpn_mul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]", "__gmpz_mul_2exp" : "extern void __gmpz_mul_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_clrbit" : "extern void __gmpz_clrbit(mpz_ptr arg0, long unsigned int arg1) [free function]", "__gmpz_cdiv_r_2exp" : "extern void __gmpz_cdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", - "__gmpz_init_set_str" : "extern int __gmpz_init_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]", + "__gmpz_lcm" : "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", "__gmpz_gcd" : "extern void __gmpz_gcd(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpq_set_ui" : "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", - "__gmpz_cmp_si" : "extern int __gmpz_cmp_si(mpz_srcptr arg0, long int arg1) [free function]", + "__gmpz_divisible_2exp_p" : "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]", "__gmpz_congruent_2exp_p" : "extern int __gmpz_congruent_2exp_p(mpz_srcptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_pow_ui" : "extern void __gmpz_pow_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpq_neg" : "void __gmpq_neg(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]", "__gmpz_import" : "extern void __gmpz_import(mpz_ptr arg0, size_t arg1, int arg2, size_t arg3, int arg4, size_t arg5, void const * arg6) [free function]", - "__gmpz_fac_ui" : "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_fdiv_ui" : "extern long unsigned int __gmpz_fdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", "__gmpz_root" : "extern int __gmpz_root(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_fdiv_q" : "extern void __gmpz_fdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpq_div_2exp" : "extern void __gmpq_div_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_fdiv_r" : "extern void __gmpz_fdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", "__gmpq_inp_str" : "extern size_t __gmpq_inp_str(mpq_ptr arg0, FILE * arg1, int arg2) [free function]", "__gmpz_ui_kronecker" : "extern int __gmpz_ui_kronecker(long unsigned int arg0, mpz_srcptr arg1) [free function]", - "__gmpz_cdiv_r_ui" : "extern long unsigned int __gmpz_cdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_remove" : "extern long unsigned int __gmpz_remove(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpz_realloc2" : "extern void __gmpz_realloc2(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_tstbit" : "extern int __gmpz_tstbit(mpz_srcptr arg0, long unsigned int arg1) [free function]", "__gmpn_tdiv_qr" : "extern void __gmpn_tdiv_qr(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, mp_srcptr arg5, mp_size_t arg6) [free function]", "__gmpz_fdiv_r_2exp" : "extern void __gmpz_fdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpf_div" : "extern void __gmpf_div(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]", "__gmpq_div" : "extern void __gmpq_div(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", - "__gmpf_get_default_prec" : "extern long unsigned int __gmpf_get_default_prec() [free function]", + "__gmpz_ui_pow_ui" : "extern void __gmpz_ui_pow_ui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", "__gmpq_sub" : "extern void __gmpq_sub(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", "__gmpf_set_ui" : "extern void __gmpf_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", - "__gmpn_add_1" : "mp_limb_t __gmpn_add_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]", + "__gmpn_lshift" : "extern mp_limb_t __gmpn_lshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]", "__gmpz_add" : "extern void __gmpz_add(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", "__gmpf_trunc" : "extern void __gmpf_trunc(mpf_ptr arg0, mpf_srcptr arg1) [free function]", "__gmpz_divexact_ui" : "extern void __gmpz_divexact_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_gcd_ui" : "extern long unsigned int __gmpz_gcd_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", - "__gmpz_out_raw" : "extern size_t __gmpz_out_raw(FILE * arg0, mpz_srcptr arg1) [free function]", - "__gmpn_sub" : "mp_limb_t __gmpn_sub(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]", + "__gmpz_cdiv_r" : "extern void __gmpz_cdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_inp_str" : "extern size_t __gmpz_inp_str(mpz_ptr arg0, FILE * arg1, int arg2) [free function]", + "__gmpq_get_d" : "extern double __gmpq_get_d(mpq_srcptr arg0) [free function]", + "__gmp_sprintf" : "extern int __gmp_sprintf(char * arg0, char const * arg1, ...) [free function]", "__gmpn_random2" : "extern void __gmpn_random2(mp_ptr arg0, mp_size_t arg1) [free function]", "__gmpz_cdiv_q_2exp" : "extern void __gmpz_cdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpf_eq" : "extern int __gmpf_eq(mpf_srcptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", "__gmpn_divrem" : "extern mp_limb_t __gmpn_divrem(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4, mp_size_t arg5) [free function]", "__gmpz_cdiv_q" : "extern void __gmpz_cdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpz_init_set" : "extern void __gmpz_init_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_abs" : "void __gmpz_abs(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]", "__gmpz_xor" : "extern void __gmpz_xor(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpz_sqrt" : "extern void __gmpz_sqrt(mpz_ptr arg0, mpz_srcptr arg1) [free function]", "__gmpz_init_set_d" : "extern void __gmpz_init_set_d(mpz_ptr arg0, double arg1) [free function]", "__gmpz_fits_ushort_p" : "int __gmpz_fits_ushort_p(mpz_srcptr __gmp_z) [free function]", - "__gmpz_sub" : "extern void __gmpz_sub(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpq_set_f" : "extern void __gmpq_set_f(mpq_ptr arg0, mpf_srcptr arg1) [free function]", "__gmpf_fits_ulong_p" : "extern int __gmpf_fits_ulong_p(mpf_srcptr arg0) [free function]", - "__gmpf_random2" : "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]", "__gmpz_get_ui" : "long unsigned int __gmpz_get_ui(mpz_srcptr __gmp_z) [free function]", + "__gmpz_cmpabs_ui" : "extern int __gmpz_cmpabs_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", "__gmp_urandomm_ui" : "extern long unsigned int __gmp_urandomm_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]", "__gmpz_perfect_square_p" : "int __gmpz_perfect_square_p(mpz_srcptr __gmp_a) [free function]", - "__gmpn_get_str" : "extern size_t __gmpn_get_str(unsigned char * arg0, int arg1, mp_ptr arg2, mp_size_t arg3) [free function]", + "__gmpq_set_d" : "extern void __gmpq_set_d(mpq_ptr arg0, double arg1) [free function]", "__gmpz_cmp_d" : "extern int __gmpz_cmp_d(mpz_srcptr arg0, double arg1) [free function]", "__gmpz_cdiv_qr" : "extern void __gmpz_cdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]", "__gmpf_add" : "extern void __gmpf_add(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]", "__gmpz_probab_prime_p" : "extern int __gmpz_probab_prime_p(mpz_srcptr arg0, int arg1) [free function]", "__gmpn_rshift" : "extern mp_limb_t __gmpn_rshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]", "__gmpz_array_init" : "extern void __gmpz_array_init(mpz_ptr arg0, mp_size_t arg1, mp_size_t arg2) [free function]", - "__gmpz_fits_uint_p" : "int __gmpz_fits_uint_p(mpz_srcptr __gmp_z) [free function]", - "__gmpz_bin_uiui" : "extern void __gmpz_bin_uiui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", - "__gmpz_tdiv_r_ui" : "extern long unsigned int __gmpz_tdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpf_get_default_prec" : "extern long unsigned int __gmpf_get_default_prec() [free function]", + "__gmpf_random2" : "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]", "__gmp_randinit_set" : "extern void __gmp_randinit_set(__gmp_randstate_struct * arg0, __gmp_randstate_struct const * arg1) [free function]", - "__gmpz_tdiv_ui" : "extern long unsigned int __gmpz_tdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", "__gmpq_inv" : "extern void __gmpq_inv(mpq_ptr arg0, mpq_srcptr arg1) [free function]", "__gmpn_set_str" : "extern mp_size_t __gmpn_set_str(mp_ptr arg0, unsigned char const * arg1, size_t arg2, int arg3) [free function]", - "__gmpz_lcm" : "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", - "__gmpn_scan0" : "extern long unsigned int __gmpn_scan0(mp_srcptr arg0, long unsigned int arg1) [free function]", - "__gmpn_scan1" : "extern long unsigned int __gmpn_scan1(mp_srcptr arg0, long unsigned int arg1) [free function]", + "__gmp_randinit" : "extern void __gmp_randinit(__gmp_randstate_struct * arg0, gmp_randalg_t arg1, ...) [free function]", + "__gmpn_sqrtrem" : "extern mp_size_t __gmpn_sqrtrem(mp_ptr arg0, mp_ptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]", "__gmpz_fdiv_qr_ui" : "extern long unsigned int __gmpz_fdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]", "__gmpf_init_set_ui" : "extern void __gmpf_init_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", "__gmpn_mul_n" : "extern void __gmpn_mul_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]", "__gmpq_cmp_ui" : "extern int __gmpq_cmp_ui(mpq_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", "__gmpz_mul_si" : "extern void __gmpz_mul_si(mpz_ptr arg0, mpz_srcptr arg1, long int arg2) [free function]", "__gmpq_set_si" : "extern void __gmpq_set_si(mpq_ptr arg0, long int arg1, long unsigned int arg2) [free function]", - "__gmpz_divisible_2exp_p" : "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]", - "__gmpn_add" : "mp_limb_t __gmpn_add(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]", + "__gmpq_set_ui" : "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", "__gmpf_sqrt_ui" : "extern void __gmpf_sqrt_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", "__gmpz_init_set_ui" : "extern void __gmpz_init_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", "__gmpz_divisible_ui_p" : "extern int __gmpz_divisible_ui_p(mpz_srcptr arg0, long unsigned int arg1) [free function]", @@ -400,101 +395,112 @@ "__gmpz_sub_ui" : "extern void __gmpz_sub_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", "__gmpz_divexact" : "extern void __gmpz_... [truncated message content] |
From: <rom...@us...> - 2009-08-05 20:25:19
|
Revision: 1742 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1742&view=rev Author: roman_yakovenko Date: 2009-08-05 20:25:05 +0000 (Wed, 05 Aug 2009) Log Message: ----------- updating testers Modified Paths: -------------- pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/selection_bug_to_be_exported.hpp pyplusplus_dev/unittests/selection_bug_tester.py Added: pyplusplus_dev/unittests/data/selection_bug_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/selection_bug_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/selection_bug_to_be_exported.hpp 2009-08-05 20:25:05 UTC (rev 1742) @@ -0,0 +1,27 @@ +// Copyright 2004-2008 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 __selection_bug_to_be_exported_hpp__ +#define __selection_bug_to_be_exported_hpp__ + +#include "libconfig.h" +#include <stdio.h> + +class A{ +public: + void g() { printf("A::g()\n"); } + virtual void foo() = 0; +}; + +class B : public A{ + virtual void foo() { printf("B:foo()\n"); } +}; + +void free_func(A *a){ + a->foo(); +} + + +#endif//__selection_bug_to_be_exported_hpp__ Added: pyplusplus_dev/unittests/selection_bug_tester.py =================================================================== --- pyplusplus_dev/unittests/selection_bug_tester.py (rev 0) +++ pyplusplus_dev/unittests/selection_bug_tester.py 2009-08-05 20:25:05 UTC (rev 1742) @@ -0,0 +1,39 @@ +# Copyright 2004-2008 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 + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'selection_bug' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + mb.class_( 'A' ).include() + mb.class_( 'B' ).include() + + #~ mb.member_functions(lambda decl:decl.virtuality == "virtual").include() + #~ mb.member_functions(lambda decl:decl.virtuality != "virtual").exclude() + mb.mem_funs( lambda decl: decl.virtuality == "not virtual" ).exclude() + def run_tests(self, module): + pass + +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 2009-08-05 20:12:45 UTC (rev 1741) +++ pyplusplus_dev/unittests/test_all.py 2009-08-05 20:25:05 UTC (rev 1742) @@ -117,6 +117,8 @@ import std_pair_tester import mem_var_compile_error_bug_tester import return_ref_to_ptr_tester +import function_adaptor_tester +import selection_bug_tester #import ogre_generate_tester testers = [ @@ -224,6 +226,8 @@ , std_pair_tester , mem_var_compile_error_bug_tester , return_ref_to_ptr_tester + , function_adaptor_tester + , selection_bug_tester # , ogre_generate_tester too much time ] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-08-05 20:13:09
|
Revision: 1741 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1741&view=rev Author: roman_yakovenko Date: 2009-08-05 20:12:45 +0000 (Wed, 05 Aug 2009) Log Message: ----------- adding adaptor for member and free functions Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py pyplusplus_dev/unittests/autoconfig.py pyplusplus_dev/unittests/fundamental_tester_base.py Added Paths: ----------- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp pyplusplus_dev/unittests/function_adaptor_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-06-14 04:42:38 UTC (rev 1740) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-05 20:12:45 UTC (rev 1741) @@ -199,12 +199,16 @@ def create_function_ref_code(self, use_function_alias=False): fname = declarations.full_name( self.declaration, with_defaults=False ) + result = '' if use_function_alias: - return '%s( &%s )' % ( self.function_type_alias, fname ) + result = '%s( &%s )' % ( self.function_type_alias, fname ) elif self.declaration.create_with_signature: - return '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname ) + result = '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname ) else: - return '&%s' % fname + result = '&%s' % fname + if self.declaration.adaptor: + result = "%s( %s )" % ( self.declaration.adaptor, result ) + return result class mem_fun_t( calldef_t ): def __init__( self, function ): @@ -216,12 +220,16 @@ def create_function_ref_code(self, use_function_alias=False): fname = declarations.full_name( self.declaration, with_defaults=False ) + result = '' if use_function_alias: - return '%s( &%s )' % ( self.function_type_alias, fname ) + result = '%s( &%s )' % ( self.function_type_alias, fname ) elif self.declaration.create_with_signature: - return '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname ) + result = '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname ) else: - return '&%s' % fname + result = '&%s' % fname + if hasattr( self.declaration, 'adaptor' ) and self.declaration.adaptor: + result = "%s( %s )" % ( self.declaration.adaptor, result ) + return result class make_constructor_t( calldef_t ): def __init__( self, function ): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-06-14 04:42:38 UTC (rev 1740) +++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-05 20:12:45 UTC (rev 1741) @@ -247,7 +247,18 @@ self._use_overload_macro = False self._override_precall_code = [] self._default_precall_code = [] + self._adaptor = None + def _get_adaptor(self): + return self._adaptor + def _set_adaptor(self, adaptor): + self._adaptor = adaptor + adaptor = property( _get_adaptor, _set_adaptor + , doc="string, if contains value `Py++` will generate code the following code: " \ + +".def(<name>, <adaptor>(<function reference>), <other args> ) " \ + +". The property is relevant for public, non virtual member functions." ) + + def add_override_precall_code(self, code): """add code, which should be executed, before overridden member function call""" self._override_precall_code.append( code ) @@ -563,7 +574,16 @@ calldef_t.__init__( self ) self._use_overload_macro = False self._declaration_code = [] + self._adaptor = None + def _get_adaptor(self): + return self._adaptor + def _set_adaptor(self, adaptor): + self._adaptor = adaptor + adaptor = property( _get_adaptor, _set_adaptor + , doc="string, if contains value `Py++` will generate code the following code: " \ + +"def(<name>, <adaptor>(<function reference>), <other args> ) " ) + def add_declaration_code( self, code ): """adds the code to the declaration section""" self.declaration_code.append( user_text.user_text_t( code ) ) Modified: pyplusplus_dev/unittests/autoconfig.py =================================================================== --- pyplusplus_dev/unittests/autoconfig.py 2009-06-14 04:42:38 UTC (rev 1740) +++ pyplusplus_dev/unittests/autoconfig.py 2009-08-05 20:12:45 UTC (rev 1741) @@ -92,9 +92,11 @@ while process.poll() is None: line = process.stdout.readline() - print line.rstrip() + if line.strip(): + print line.rstrip() for line in process.stdout.readlines(): - print line.rstrip() + if line.strip(): + print line.rstrip() if process.returncode: raise RuntimeError( "unable to compile extension. See output for the errors." ) Added: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-05 20:12:45 UTC (rev 1741) @@ -0,0 +1,21 @@ +// Copyright 2004-2008 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 __function_adaptor_to_be_exported_hpp__ +#define __function_adaptor_to_be_exported_hpp__ + +//#include <boost/preprocessor/facilities/identity.hpp> +//I need it for BOOST_PP_IDENTITY macro + +#define PYPP_IDENTITY( X ) X + +struct foo_t{ + int get_zero() const{ return 0; } + static int get_two(){ return 2; } +}; + +inline int get_one(){ return 1; } + +#endif//__function_adaptor_to_be_exported_hpp__ Added: pyplusplus_dev/unittests/function_adaptor_tester.py =================================================================== --- pyplusplus_dev/unittests/function_adaptor_tester.py (rev 0) +++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-05 20:12:45 UTC (rev 1741) @@ -0,0 +1,41 @@ +# Copyright 2004-2008 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 pyplusplus import code_creators + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'function_adaptor' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + for suffix in [ 'zero', 'one', 'two' ]: + mb.calldef( 'get_' + suffix ).adaptor = 'PYPP_IDENTITY' + mb.calldef( 'get_' + suffix ).create_with_signature = False + def run_tests( self, module): + foo = module.foo_t() + self.failUnless( foo.get_zero() == 0 ) + self.failUnless( foo.get_two() == 2 ) + self.failUnless( module.foo_t.get_two() == 2 ) + self.failUnless( module.get_one() == 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/fundamental_tester_base.py =================================================================== --- pyplusplus_dev/unittests/fundamental_tester_base.py 2009-06-14 04:42:38 UTC (rev 1740) +++ pyplusplus_dev/unittests/fundamental_tester_base.py 2009-08-05 20:12:45 UTC (rev 1741) @@ -137,6 +137,7 @@ break exit_status = output.close() scons_msg = ''.join(scons_reports) + scons_msg = scons_msg.strip() if exit_status: raise RuntimeError( "unable to clean extension. error: %s" % scons_msg ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-06-14 04:42:39
|
Revision: 1740 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1740&view=rev Author: roman_yakovenko Date: 2009-06-14 04:42:38 +0000 (Sun, 14 Jun 2009) Log Message: ----------- applying patch from Giovanni Beltrame Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2009-06-14 04:17:46 UTC (rev 1739) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2009-06-14 04:42:38 UTC (rev 1740) @@ -34,7 +34,8 @@ tmpl = '%s.%s' if self.is_comment( code ): tmpl = '%s%s' - result.append( self.indent( tmpl % ( os.linesep, code ) ) ) + if code: + result.append( self.indent( tmpl % ( os.linesep, code ) ) ) result.append( ';' ) return ''.join( result ) @@ -249,7 +250,8 @@ tmpl = '%s.%s' if self.is_comment( code ): tmpl = '%s%s' - result.append( self.indent( tmpl % ( os.linesep, code ) ) ) + if code: + result.append( self.indent( tmpl % ( os.linesep, code ) ) ) result.append( ';' ) return ''.join( result ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-06-14 04:17:47
|
Revision: 1739 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1739&view=rev Author: roman_yakovenko Date: 2009-06-14 04:17:46 +0000 (Sun, 14 Jun 2009) Log Message: ----------- adding new test case - immutable by reference Modified Paths: -------------- pyplusplus_dev/unittests/call_policies_tester.py pyplusplus_dev/unittests/classes_tester.py pyplusplus_dev/unittests/data/call_policies_to_be_exported.hpp Modified: pyplusplus_dev/unittests/call_policies_tester.py =================================================================== --- pyplusplus_dev/unittests/call_policies_tester.py 2009-06-10 06:31:44 UTC (rev 1738) +++ pyplusplus_dev/unittests/call_policies_tester.py 2009-06-14 04:17:46 UTC (rev 1739) @@ -24,7 +24,7 @@ ssize_t operator()( boost::python::tuple args ){ boost::python::object self = args[0]; - call_policies::return_range_image_t& image + call_policies::return_range_image_t& image = boost::python::extract<call_policies::return_range_image_t&>( self ); return image.raw_data.size(); } @@ -82,6 +82,9 @@ , 'get_create_images_size_t' , call_policies.return_value_policy(call_policies.reference_existing_object) ) + mb.calldef( '::call_policies::immutable_by_ref_t::get_value' ).call_policies \ + = call_policies.return_value_policy( call_policies.copy_non_const_reference ) + def run_tests(self, module): self.failUnless( module.compare( module.my_address() ) ) @@ -99,26 +102,29 @@ self.failUnless( 1977 == cont[1977] ) self.failUnless( 0.5 == module.get_fundamental_ptr_value() ) - + self.failUnless( None is module.get_fundamental_ptr_value_null() ) - + module.get_impl_details() module.get_opaque() - + x = module.arrays() for i in range( 4 ): arr3 = x.create_arr_3() self.failUnless( arr3 == (0,1,2) ) - + image = module.return_range_image_t() raw_data = image.get_raw_data() self.failUnless( ['1', '\0', '2']==list( raw_data ) ) - raw_data[1] = 'x' + raw_data[1] = 'x' self.failUnless( raw_data[1] == image.raw_data[1] ) for index, img in enumerate( image.create_images() ): print index, img + ibr = module.immutable_by_ref_t() + self.failUnless( ibr.get_value() == ibr.value ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) Modified: pyplusplus_dev/unittests/classes_tester.py =================================================================== --- pyplusplus_dev/unittests/classes_tester.py 2009-06-10 06:31:44 UTC (rev 1738) +++ pyplusplus_dev/unittests/classes_tester.py 2009-06-14 04:17:46 UTC (rev 1739) @@ -30,6 +30,7 @@ protected_static_t = mb.class_( 'protected_static_t' ) self.failUnless( 'PROTECTED_STATIC' in protected_static_t.alias) protected_static_t.alias = 'protected_static_t' + mb.operators() def run_tests(self, module): self.failIfRaisesAny( module.fundamental1 ) Modified: pyplusplus_dev/unittests/data/call_policies_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/call_policies_to_be_exported.hpp 2009-06-10 06:31:44 UTC (rev 1738) +++ pyplusplus_dev/unittests/data/call_policies_to_be_exported.hpp 2009-06-14 04:17:46 UTC (rev 1739) @@ -122,6 +122,15 @@ } }; + +struct immutable_by_ref_t{ + immutable_by_ref_t() : value ( 2977 ){}; + + int& get_value(){ return value; } + + int value; +}; + } #endif//__call_policies_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...> - 2009-06-10 06:32:34
|
Revision: 1738 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1738&view=rev Author: roman_yakovenko Date: 2009-06-10 06:31:44 +0000 (Wed, 10 Jun 2009) Log Message: ----------- adding problematic use case, contributed by Zbigniew Mandziejewicz Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/decl_printer.py pygccxml_dev/unittests/project_reader_correctness_tester.py Added Paths: ----------- pygccxml_dev/unittests/data/separate_compilation/ pygccxml_dev/unittests/data/separate_compilation/all.h pygccxml_dev/unittests/data/separate_compilation/base.h pygccxml_dev/unittests/data/separate_compilation/data.h pygccxml_dev/unittests/data/separate_compilation/derived.h Modified: pygccxml_dev/pygccxml/declarations/decl_printer.py =================================================================== --- pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-05-19 17:44:52 UTC (rev 1737) +++ pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-06-10 06:31:44 UTC (rev 1738) @@ -29,7 +29,7 @@ self.__verbose = verbose self.__writer = writer if not self.__writer: - self.__writer = lambda x: sys.stdout.write( x + os.linesep ) + self.__writer = lambda x: sys.stdout.write( x ) def clone(self, increment_level=True): level = self.__level Added: pygccxml_dev/unittests/data/separate_compilation/all.h =================================================================== --- pygccxml_dev/unittests/data/separate_compilation/all.h (rev 0) +++ pygccxml_dev/unittests/data/separate_compilation/all.h 2009-06-10 06:31:44 UTC (rev 1738) @@ -0,0 +1,8 @@ +#ifndef __all_h_10062009__ +#define __all_h_10062009__ 1 + +#include "data.h" +#include "base.h" +#include "derived.h" + +#endif//__all_h_10062009__ Added: pygccxml_dev/unittests/data/separate_compilation/base.h =================================================================== --- pygccxml_dev/unittests/data/separate_compilation/base.h (rev 0) +++ pygccxml_dev/unittests/data/separate_compilation/base.h 2009-06-10 06:31:44 UTC (rev 1738) @@ -0,0 +1,15 @@ +#ifndef __base_h_10062009__ +#define __base_h_10062009__ 1 + +#include "data.h" + +namespace buggy{ + +struct base_t{ + virtual ~base_t() {}; + virtual data_t* get_data() const = 0; +}; + +} + +#endif//__base_h_10062009__ Added: pygccxml_dev/unittests/data/separate_compilation/data.h =================================================================== --- pygccxml_dev/unittests/data/separate_compilation/data.h (rev 0) +++ pygccxml_dev/unittests/data/separate_compilation/data.h 2009-06-10 06:31:44 UTC (rev 1738) @@ -0,0 +1,32 @@ +#ifndef __data_h_10062009__ +#define __data_h_10062009__ 1 + +namespace std{ + +template<class T1, class T2> +struct pair{ + typedef pair<T1, T2> _Myt; + typedef T1 first_type; + typedef T2 second_type; + + pair(): first(T1()), second(T2()) + {} + + pair(const T1& t1, const T2& t2) + : first(t1), second(t2) + {} + + T1 first; // the first stored value + T2 second; // the second stored value +}; +} + +namespace buggy{ + +struct data_t{ + typedef std::pair<data_t*, data_t*> pair_t; +}; + +} + +#endif//__data_h_10062009__ Added: pygccxml_dev/unittests/data/separate_compilation/derived.h =================================================================== --- pygccxml_dev/unittests/data/separate_compilation/derived.h (rev 0) +++ pygccxml_dev/unittests/data/separate_compilation/derived.h 2009-06-10 06:31:44 UTC (rev 1738) @@ -0,0 +1,20 @@ +#ifndef __derived_h_10062009__ +#define __derived_h_10062009__ 1 + +#include "base.h" + +namespace buggy{ + +class derived_t: public base_t{ +public: + + virtual ~derived_t() {}; + virtual data_t* get_data() const; + +private: + data_t::pair_t data_pair; +}; + +} + +#endif//__derived_h_10062009__ Modified: pygccxml_dev/unittests/project_reader_correctness_tester.py =================================================================== --- pygccxml_dev/unittests/project_reader_correctness_tester.py 2009-05-19 17:44:52 UTC (rev 1737) +++ pygccxml_dev/unittests/project_reader_correctness_tester.py 2009-06-10 06:31:44 UTC (rev 1738) @@ -10,7 +10,7 @@ import pygccxml from pygccxml import utils from pygccxml import parser -from pygccxml import declarations +from pygccxml import declarations class tester_t( parser_test_case.parser_test_case_t ): def __init__(self, *args): @@ -50,10 +50,39 @@ def test_correctness(self): for src in self.__files: self.__test_correctness_impl( src ) - + + +class tester2_t( parser_test_case.parser_test_case_t ): + def __init__(self, *args): + parser_test_case.parser_test_case_t.__init__(self, *args) + self.__files = [ + 'separate_compilation/data.h' + , 'separate_compilation/base.h' + , 'separate_compilation/derived.h' + ] + + def test(self): + prj_reader = parser.project_reader_t( self.config ) + prj_decls = prj_reader.read_files( self.__files + , compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE ) + src_reader = parser.source_reader_t( self.config ) + src_decls = src_reader.read_file( 'separate_compilation/all.h' ) + if src_decls != prj_decls: + s = src_decls[0] + p = prj_decls[0] + sr = file( os.path.join( autoconfig.build_directory , 'separate_compilation.sr.txt'),'w+b' ) + pr = file( os.path.join( autoconfig.build_directory , 'separate_compilation.pr.txt'), 'w+b' ) + declarations.print_declarations( s, writer=lambda l: sr.write( l ) ) + declarations.print_declarations( p, writer=lambda l: pr.write( l ) ) + sr.close() + pr.close() + self.fail( "Expected - There is a difference between declarations" ) + + def create_suite(): - suite = unittest.TestSuite() - suite.addTest( unittest.makeSuite(tester_t)) + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + suite.addTest( unittest.makeSuite(tester2_t)) return suite def run_suite(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-05-19 17:45:05
|
Revision: 1737 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1737&view=rev Author: roman_yakovenko Date: 2009-05-19 17:44:52 +0000 (Tue, 19 May 2009) Log Message: ----------- update version number Modified Paths: -------------- pygccxml_dev/docs/history/history.rest pygccxml_dev/pygccxml/__init__.py pyplusplus_dev/docs/history/history.rest pyplusplus_dev/pyplusplus/__init__.py Modified: pygccxml_dev/docs/history/history.rest =================================================================== --- pygccxml_dev/docs/history/history.rest 2009-05-17 08:34:14 UTC (rev 1736) +++ pygccxml_dev/docs/history/history.rest 2009-05-19 17:44:52 UTC (rev 1737) @@ -23,7 +23,7 @@ * Gustavo Carneiro ----------- -Version 1.1 +SVN Version ----------- 1. Experimental back-ends based on ``.pdb`` and ``.bsc`` files were removed. Modified: pygccxml_dev/pygccxml/__init__.py =================================================================== --- pygccxml_dev/pygccxml/__init__.py 2009-05-17 08:34:14 UTC (rev 1736) +++ pygccxml_dev/pygccxml/__init__.py 2009-05-19 17:44:52 UTC (rev 1737) @@ -33,6 +33,6 @@ #TODO: # 1. Add "explicit" property for constructors -__version__ = '1.1.0' +__version__ = '1.5.0' __revision__ = 1080 Modified: pyplusplus_dev/docs/history/history.rest =================================================================== --- pyplusplus_dev/docs/history/history.rest 2009-05-17 08:34:14 UTC (rev 1736) +++ pyplusplus_dev/docs/history/history.rest 2009-05-19 17:44:52 UTC (rev 1737) @@ -1,560 +1,560 @@ -=================== -Development history -=================== - ------------- -Contributors ------------- - -Thanks to all the people that have contributed patches, bug reports and suggestions: - -* My wife - Yulia -* John Pallister -* Matthias Baas -* Allen Bierbaum -* Lakin Wecker -* Georgiy Dernovoy -* Gottfried Ganssauge -* Andy Miller -* Martin Preisler -* Meghana Haridev -* Julian Scheid -* Oliver Schweitzer -* Hernán Ordiales -* Bernd Fritzke -* Andrei Vermel -* Carsten( spom.spom ) - ------------ -Version 1.1 ------------ - -1. The bug related to exposing free operators was fixed. Many thanks to Andrei Vermel. - -2. Few bugs were fixed for 64Bit platform. Many thanks to Carsten. - -3. :mod:`ctypes` backend was introduced - :doc:`Py++ <../pyplusplus>` is able to - generate Python code, which uses :mod:`ctypes` package to call functions in - DLLs or shared libraries. - - Massive refactoring, which preserve backward compatibility to previous releases, - was done. - -4. From now on, :doc:`Py++ <../pyplusplus>` will use `Sphinx <http://sphinx.pocoo.org/>`_ - for all documentation. - -5. :doc:`Indexing Suite V2 <../documentation/indexing_suite_v2.html>` introduces - few backward compatibility changes. The indexing suite became "headers only" - library and doesn't requier Boost.Python library patching. - See ":doc:`../documentation/containers`" document for more information. - -6. Support for `std::hash_map<...>` and `std::hash_set<...>` containers was added. - ------------ -Version 1.0 ------------ - -1. The algorithm, which calculates what member functions should be redefined in - derived class wrappers, was improved. Many thanks to Julian Scheid for the bug - fix. - - The change explanation. - - .. code-block:: c++ - - struct A{ - virtual void foo() {} - }; - - class B: public A{ - }; - - Previous version of :doc:`Py++ <../pyplusplus>` didn't generate wrapper for class ``B``, even - though ``B`` inherits ``A``'s virtual function. Now if you have the following - Python code: - - .. code-block:: python - - class C(B): - def __init__( self ): - B.__init__(self) - def foo(self): - print "C.foo" - - then when ``foo`` is invoked on this instance on the C++ side of things, the - Python code won't be executed as the wrapper was missing. - - **Warning!** **There is a possibility that your generated code will not work!** - **Keep reading.** - - If you use "function transformation" functionality, than it is possible the - generated code will **NOT** work. Consider the following example: - - .. code-block:: c++ - - struct A{ - virtual void foo(int& i) {/*do smth*/} - }; - - class B: public A{ - virtual void foo(int& i) {/*do smth else*/} - }; - - The :doc:`Py++ <../pyplusplus>` code: - - .. code-block:: python - - from pyplusplus import module_builder - from pyplusplus import function_transformers as FT - - mb = module_builder_t( ... ) - foo = mb.mem_funs( 'foo' ) - foo.add_transformation( FT.output(0) ) - - The generated code, for class ``B``, is: - - .. code-block:: c++ - - namespace bp = boost::python; - - struct B_wrapper : B, bp::wrapper< B > { - virtual void foo( int & i ) const { ... } - - static boost::python::tuple default_foo( ::B const & inst ) - { ... } - - virtual void foo( int & i ) const - { ... } - - static boost::python::object default_foo( ::A const & inst ) - { ... } - }; - ... - bp::class_< B_wrapper, bp::bases< A > >( "B" ) - .def( "foo", (boost::python::tuple (*)( ::B const & ))( &B_wrapper::default_foo ) ) - .def( "foo", (boost::python::object (*)( ::A const & ))( &B_wrapper::default_foo ) ); - - As you can see, after applying the transformation both functions have same - signature. Do you know what function will be called in some situation? I do - - the wrong one :-(. - - Unfortunately, there is no easy work around or some trick that you can use, - which will not break the existing code. I see few solutions to the problem: - - * change the alias of the functions - - .. code-block:: python - - from pyplusplus import module_builder - from pyplusplus import function_transformers as FT - - mb = module_builder_t( ... ) - foo = mb.mem_funs( '::A::foo' ).add_transformation( FT.output(0), alias="foo_a" ) - foo = mb.mem_funs( '::B::foo' ).add_transformation( FT.output(0), alias="foo_b" ) - - * use ``inout`` transformation - it preserves a function signature - - * :doc:`Py++ <../pyplusplus>` can introduce a configuration, that will preserve the previous behaviour. - I think this is a wrong way to go and doing the API changes is the 'right' - longer term solution. - - If you **absolutely need** to preserve API backward compatible, contact me - and I will introduce such configuration option. - - Sorry for inconvenience. - -2. Few bugs, related to Indexing Suite 2, were fixed. Many thanks to Oliver Schweitzer - for reporting them. - -3. New and highly experimental feature was introduced - - :doc:`Boost.Python and ctypes integration <../documentation/ctypes/ctypes_integration>`. - -4. Support for :doc:`boost::python::make_constructor <../documentation/functions/make_constructor>` functionality was added. - -5. Support for unions and unnamed classes was added. - -6. Doxygen documentation extractor was improved. Many thanks to Hernán Ordiales. - -7. Py++ documentation was improved. Many thanks to Bernd Fritzke. - -------------- -Version 0.9.5 -------------- - -1. Bug fixes: - - * Py++ will not expose free operators, if at least one of the classes, it works - on, is not exposed. - Many thanks to Meghana Haridev for reporting the bug. - -2. Added ability to completely disable warnings reporting. - -3. All logging is now done to ``stderr`` instead of ``stdout``. - -4. Generated code improvements: - - * ``default_call_policies`` is not generated - - * ``return_internal_reference`` call policies - default arguments are not - generated - - * STD containers are generated without default arguments. For example instead - of ``std::vector< int, std::allocator< int > >``, in many cases :doc:`Py++ <../pyplusplus>` will - generate ``std::vector< int >``. - -5. :doc:`create_with_signature <../documentation/functions/overloading>` algorithm was improved. - :doc:`Py++ <../pyplusplus>` will generate correct code in one more use case. - -6. Added ability to exclude declarations from being exposed, if they will cause - compilation to fail. - -7. Starting from this version, :doc:`Py++ <../pyplusplus>` provides a complete solution for - :doc:`multi-module development <../documentation/multi_module_development>`. - -8. Classes, which expose C arrays will be registered only once. - -9. Starting from this version, :doc:`Py++ <../pyplusplus>` supports a code generation with different - encodings. - -10. There is a new strategy to split code into files. It is IDE friendly. Be sure - to read :doc:`the updated documentation <../documentation/split_module>`. - -------------- -Version 0.9.0 -------------- - -1. Bug fixes: - - * Declaration of virtual functions that have an exception specification with - an empty throw was fixed. Now the exception specification is generated properly. - Many thanks to Martin Preisler for reporting the bug. - -2. Added exposing of copy constructor, ``operator=`` and ``operator<<``. - - * ``operator=`` is exposed under "assign" name - - * ``operator<<`` is exposed under "__str__" name - -3. Added new call policies: - - * :doc:`as_tuple <../documentation/functions/call_policies/as_tuple>` - - * :doc:`custom_call_policies <../documentation/functions/call_policies/return_range>` - - * :doc:`return_range <../documentation/functions/call_policies/return_range>` - -4. Added an initial support for multi-module development. Now you can mark your - declarations as ``already_exposed`` and :doc:`Py++ <../pyplusplus>` will do the rest. For more - information read :doc:`multi-module development guide <../documentation/multi_module_development>`. - -.. line-separator - -5. :doc:`input_c_buffer <../documentation/functions/transformation/input_c_buffer>` - new functions - transformation, which allows to pass a Python sequence to function, instead of pair of arguments: pointer to buffer and size. - -6. Added ability to control generated "include" directives. Now you can ask :doc:`Py++ <../pyplusplus>` - to include a header file, when it generates code for some declaration. For more - information refers to `inserting code guide`_. - -.. _`inserting code guide` : ../documentation/inserting_code.html#header-files - -7. Code generation improvements: system header files ( Boost.Python or Py++ defined ) - will be included from the generated files only in case the generated code - depends on them. - -8. Performance improvements: Py++ runs 1.5 - 2 times faster, than the previous one. - -9. Added ability to add code before overridden and default function calls. - For more information refer to `member function API documentation`_. - -.. _`member function API documentation` : ../documentation/apidocs/pyplusplus.decl_wrappers.calldef_wrapper.member_function_t-class.html - -10. :doc:`Py++ <../pyplusplus>` will generate documentation for automatically constructed properties. - For more information refer to :doc:`properties guide <../documentation/properties>`. - -11. Added iteration functionality to Boost.Python Indexing Suite V2 ``std::map`` - and ``std::multimap`` containers. - -------------- -Version 0.8.5 -------------- - -1. Added :doc:`Function Transformation <../documentation/functions/transformation/transformation>` feature. - -2. "Py++" introduces new functionality, which allows you to control messages and - warnings: :doc:`how to disable warnings? <../documentation/warnings>`. - -3. Added new algorithm, which controls the registration order of the functions. - See :doc:`registration order document <../documentation/functions/registration_order>` - -4. New "Py++" defined :doc:`return_pointee_value <../documentation/functions/call_policies/return_pointee_value>` - call policy was introduced. - -5. Support for opaque types was added. Read more about this feature `here`__. - -.. __ : ../documentation/functions/call_policies/call_policies.html#special-case - -6. It is possible to configure "Py++" to generate faster ( compilation time ) - code for indexing suite version 2. See API documentation. - -7. The algorithm, which finds all class properties was improved. It provides - user with a better way to control properties creation. A property that would - hide another exposed declaration will not be registered\\created. - -8. Work around for "custom smart pointer as member variable" Boost.Python bug - was introduced. - -9. Bugs fixes and documentation improvement. - - -------------- -Version 0.8.2 -------------- - -1. Interface changes: - - * ``module_builder.module_builder_t.build_code_creator`` method: - argument ``create_casting_constructor`` was removed and deprecation warning - was introduced. - -2. Performance improvements. In some cases you can get x10 performance boost. - Many thanks to Allen Bierbaum! Saving and reusing results of different - :doc:`pygccxml <../../pygccxml/pygccxml>` algorithms and type traits functions achieved this. - -3. Convenience API for registering exception translator was introduced. - -4. :doc:`Py++ <../pyplusplus>` can generate code that uses ``BOOST_PYTHON_FUNCTION_OVERLOADS`` and - ``BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS`` macros. - -5. Treatment to previously generated and no more in-use files was added. By - default :doc:`Py++ <../pyplusplus>` will delete these files, but of course you can redefine this - behaviour. - -6. Generated code changes: - - * ``default_call_policies`` should not be generated any more. - - * For functions that have ``return_value_policy< return_opaque_pointer >`` - call policy, :doc:`Py++ <../pyplusplus>` will automatically generate ``BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID`` - macro. Thank you very much for Gottfried Ganssauge for this idea. - -7. Support for Boost.Python properties was introduced. :doc:`Py++ <../pyplusplus>` implements small - algorithm, that will automatically discover properties, base on naming conventions. - -8. ``decl_wrappers.class_t`` has new function: ``is_wrapper_needed``. This - function explains why :doc:`Py++ <../pyplusplus>` creates class wrapper for exposed class. - -9. Python type traits module was introduce. Today it contains only single function: - - * ``is_immutable`` - returns ``True`` if exposed type is Python immutable type - - - -------------- -Version 0.8.1 -------------- - - -1. Georgiy Dernovoy contributed a patch, which allows :doc:`Py++ <../pyplusplus>` GUI to - save\\load last used header file. - - -2. :doc:`Py++ <../pyplusplus>` improved a lot functionality related to providing feedback to user: - - * every package has its own logger - * only important user messages are written to ``stdout`` - * user messages are clear - -3. Support for Boost.Python indexing suite version 2 was implemented. - -4. Every code creator class took ``parent`` argument in ``__init__`` method. - This argument was removed. ``adopt_creator`` and ``remove_creator`` will - set\unset reference to parent. - -5. Generated code for member and free functions was changed. This changed was - introduced to fix compilation errors on msvc 7.1 compiler. - -6. :doc:`Py++ <../pyplusplus>` generates "stable" code. If header files were not changed, - :doc:`Py++ <../pyplusplus>` will not change any file. - -7. Support for huge classes was added. :doc:`Py++ <../pyplusplus>` is able to split registration - code for the class to multiple cpp files. - -8. User code could be added almost anywhere, without use of low level API. - -9. Generated source files include only header files you passes as an argument - to module builder. - -10. Bug fixes. - -11. Documentation was improved. - - -Project name changed --------------------- - -In this version the project has been renamed from "pyplusplus" to "Py++". -There were few reasons to this: - -1. I like "Py++" more then "pyplusplus". - -2. "Py++" was the original name of the project: http://mail.python.org/pipermail/c++-sig/2005-July/009280.html - -3. Users always changed the name of the projects. I saw at least 6 different names. - - - -------------- -Version 0.8.0 -------------- - -1. :doc:`Py++ <../pyplusplus>` "user guide" functionality has been improved. Now :doc:`Py++ <../pyplusplus>` - can answer few questions: - - * why this declaration could not be exported - - * why this function could not be overridden from Python - -2. :doc:`Py++ <../pyplusplus>` can suggest an alias for exported classes. - -3. Small redesign has been done - now it is much easier to understand and - maintain code creators, which creates code for C++ functions. - -4. Exception specification is taken into account, when :doc:`Py++ <../pyplusplus>` exports - member functions. - -5. Member variables, that are pointers exported correctly. - -6. Added experimental support for ``vector_indexing_suite``. - -7. Bug fixes. - -------------- -Version 0.7.0 -------------- - -Many thanks to *Matthias Baas* and *Allen Bierbaum*! They contributed so much to -Py++, especially Matthias: - - * New high-level API: :doc:`Py++ <../pyplusplus>` has simple and powerful API - - * Documentation: Matthias and Allen added a lot of documentation strings - - * Bug fixes and performance improvements - -1. New GUI features: - - * It is possible now to see XML generated by GCC-XML. - - * It is possible to use GUI as wizard. It will help you to start with - :doc:`Py++ <../pyplusplus>`, by generating :doc:`Py++ <../pyplusplus>` code. - -2. **Attention - non backward compatible change**. - - ``module_creator.creator_t.__init__`` method has been changed. ``decls`` - argument could be interpreted as - - * list of all declaration to be exported - - * list of top-level declarations. ``creator_t`` should export all - declarations recursively. - - In order to clarify the use of ``decls`` argument new argument ``recursive`` - has been added. By default new value of ``recursive`` is ``False``. - - Guide for users/upgraders: if use are exporting all declaration without - filtering, you should set ``recursive`` argument to ``True``. If you use - ``pygccxml.declarations.filtering.*`` functions, you have nothing to do. - - Sorry for the inconvenience :-(. - -3. Better split of extension module to files. From now the following declarations will - have dedicated file: - - * named enumerations, defined within namespace - * unnamed enumerations and global variables - * free functions - - This functionality will keep the number of instantiated templates within - one file, ``main.cpp``, to be very low. Also it is possible to implement - solution, where ``main.cpp`` file does not contain templates instantiations - at all. - -4. Only constant casting operators could be used with ``implicitly_convertible``. - This bug has been fixed. - -5. Bug exporting non copyable class has been fixed. - -6. Small bug fix - from now file with identical content will not be overwritten. - -7. Boost.Python ``optional`` is now supported and used when a constructor has a - a default argument. - -8. :doc:`Py++ <../pyplusplus>` now generates correct code for hierarchy of abstract classes: - - .. code-block:: c++ - - struct abstract1{ - virtual void do_smth() = 0; - } - - struct abstract2 : public abstract1{ - virtual void do_smth_else() = 0; - } - - struct concrete : public abstract2{ - virtual void do_smth(){}; - virtual void do_smth_else(){}; - } - -9. Logging functionality has been added - -10. New packages ``module_builder``, ``decl_wrappers`` and ``_logging_`` has - been added. - -11. ... - -http://boost.org/libs/python/doc/v2/init.html#optional-spec - -------------- -Version 0.6.0 -------------- - -1. Code repository has been introduced. This repository contains classes - and functions that will help users to export different C++ classes and - declarations. Right now this repository contains two classes: - - * *array_1_t* - - * *const_array_1_t* - - Those classes helps to export static, single dimension arrays. - -2. Code generation has been improved. - -3. Code generation speed has been improved. - -4. If you have Niall Douglas *void\** patch, then you can enjoy from - automatically set call policies. - -5. Bit fields can be accessed from Python - -6. Creating custom code creator example has been added. - -7. Comparison to Pyste has been wrote. - -8. Using this version it is possible to export most of TnFOX Python bindings. - -------------- -Version 0.5.1 -------------- - -1. operator() is now supported. - -2. Special casting operators are renamed( *__int__*, *__str__*, ... ). - -3. Few bug fixes - - -.. _`SourceForge`: http://sourceforge.net/index.php - +=================== +Development history +=================== + +------------ +Contributors +------------ + +Thanks to all the people that have contributed patches, bug reports and suggestions: + +* My wife - Yulia +* John Pallister +* Matthias Baas +* Allen Bierbaum +* Lakin Wecker +* Georgiy Dernovoy +* Gottfried Ganssauge +* Andy Miller +* Martin Preisler +* Meghana Haridev +* Julian Scheid +* Oliver Schweitzer +* Hernán Ordiales +* Bernd Fritzke +* Andrei Vermel +* Carsten( spom.spom ) + +----------- +SVN Version +----------- + +1. The bug related to exposing free operators was fixed. Many thanks to Andrei Vermel. + +2. Few bugs were fixed for 64Bit platform. Many thanks to Carsten. + +3. :mod:`ctypes` backend was introduced - :doc:`Py++ <../pyplusplus>` is able to + generate Python code, which uses :mod:`ctypes` package to call functions in + DLLs or shared libraries. + + Massive refactoring, which preserve backward compatibility to previous releases, + was done. + +4. From now on, :doc:`Py++ <../pyplusplus>` will use `Sphinx <http://sphinx.pocoo.org/>`_ + for all documentation. + +5. :doc:`Indexing Suite V2 <../documentation/indexing_suite_v2.html>` introduces + few backward compatibility changes. The indexing suite became "headers only" + library and doesn't requier Boost.Python library patching. + See ":doc:`../documentation/containers`" document for more information. + +6. Support for `std::hash_map<...>` and `std::hash_set<...>` containers was added. + +----------- +Version 1.0 +----------- + +1. The algorithm, which calculates what member functions should be redefined in + derived class wrappers, was improved. Many thanks to Julian Scheid for the bug + fix. + + The change explanation. + + .. code-block:: c++ + + struct A{ + virtual void foo() {} + }; + + class B: public A{ + }; + + Previous version of :doc:`Py++ <../pyplusplus>` didn't generate wrapper for class ``B``, even + though ``B`` inherits ``A``'s virtual function. Now if you have the following + Python code: + + .. code-block:: python + + class C(B): + def __init__( self ): + B.__init__(self) + def foo(self): + print "C.foo" + + then when ``foo`` is invoked on this instance on the C++ side of things, the + Python code won't be executed as the wrapper was missing. + + **Warning!** **There is a possibility that your generated code will not work!** + **Keep reading.** + + If you use "function transformation" functionality, than it is possible the + generated code will **NOT** work. Consider the following example: + + .. code-block:: c++ + + struct A{ + virtual void foo(int& i) {/*do smth*/} + }; + + class B: public A{ + virtual void foo(int& i) {/*do smth else*/} + }; + + The :doc:`Py++ <../pyplusplus>` code: + + .. code-block:: python + + from pyplusplus import module_builder + from pyplusplus import function_transformers as FT + + mb = module_builder_t( ... ) + foo = mb.mem_funs( 'foo' ) + foo.add_transformation( FT.output(0) ) + + The generated code, for class ``B``, is: + + .. code-block:: c++ + + namespace bp = boost::python; + + struct B_wrapper : B, bp::wrapper< B > { + virtual void foo( int & i ) const { ... } + + static boost::python::tuple default_foo( ::B const & inst ) + { ... } + + virtual void foo( int & i ) const + { ... } + + static boost::python::object default_foo( ::A const & inst ) + { ... } + }; + ... + bp::class_< B_wrapper, bp::bases< A > >( "B" ) + .def( "foo", (boost::python::tuple (*)( ::B const & ))( &B_wrapper::default_foo ) ) + .def( "foo", (boost::python::object (*)( ::A const & ))( &B_wrapper::default_foo ) ); + + As you can see, after applying the transformation both functions have same + signature. Do you know what function will be called in some situation? I do - + the wrong one :-(. + + Unfortunately, there is no easy work around or some trick that you can use, + which will not break the existing code. I see few solutions to the problem: + + * change the alias of the functions + + .. code-block:: python + + from pyplusplus import module_builder + from pyplusplus import function_transformers as FT + + mb = module_builder_t( ... ) + foo = mb.mem_funs( '::A::foo' ).add_transformation( FT.output(0), alias="foo_a" ) + foo = mb.mem_funs( '::B::foo' ).add_transformation( FT.output(0), alias="foo_b" ) + + * use ``inout`` transformation - it preserves a function signature + + * :doc:`Py++ <../pyplusplus>` can introduce a configuration, that will preserve the previous behaviour. + I think this is a wrong way to go and doing the API changes is the 'right' + longer term solution. + + If you **absolutely need** to preserve API backward compatible, contact me + and I will introduce such configuration option. + + Sorry for inconvenience. + +2. Few bugs, related to Indexing Suite 2, were fixed. Many thanks to Oliver Schweitzer + for reporting them. + +3. New and highly experimental feature was introduced - + :doc:`Boost.Python and ctypes integration <../documentation/ctypes/ctypes_integration>`. + +4. Support for :doc:`boost::python::make_constructor <../documentation/functions/make_constructor>` functionality was added. + +5. Support for unions and unnamed classes was added. + +6. Doxygen documentation extractor was improved. Many thanks to Hernán Ordiales. + +7. Py++ documentation was improved. Many thanks to Bernd Fritzke. + +------------- +Version 0.9.5 +------------- + +1. Bug fixes: + + * Py++ will not expose free operators, if at least one of the classes, it works + on, is not exposed. + Many thanks to Meghana Haridev for reporting the bug. + +2. Added ability to completely disable warnings reporting. + +3. All logging is now done to ``stderr`` instead of ``stdout``. + +4. Generated code improvements: + + * ``default_call_policies`` is not generated + + * ``return_internal_reference`` call policies - default arguments are not + generated + + * STD containers are generated without default arguments. For example instead + of ``std::vector< int, std::allocator< int > >``, in many cases :doc:`Py++ <../pyplusplus>` will + generate ``std::vector< int >``. + +5. :doc:`create_with_signature <../documentation/functions/overloading>` algorithm was improved. + :doc:`Py++ <../pyplusplus>` will generate correct code in one more use case. + +6. Added ability to exclude declarations from being exposed, if they will cause + compilation to fail. + +7. Starting from this version, :doc:`Py++ <../pyplusplus>` provides a complete solution for + :doc:`multi-module development <../documentation/multi_module_development>`. + +8. Classes, which expose C arrays will be registered only once. + +9. Starting from this version, :doc:`Py++ <../pyplusplus>` supports a code generation with different + encodings. + +10. There is a new strategy to split code into files. It is IDE friendly. Be sure + to read :doc:`the updated documentation <../documentation/split_module>`. + +------------- +Version 0.9.0 +------------- + +1. Bug fixes: + + * Declaration of virtual functions that have an exception specification with + an empty throw was fixed. Now the exception specification is generated properly. + Many thanks to Martin Preisler for reporting the bug. + +2. Added exposing of copy constructor, ``operator=`` and ``operator<<``. + + * ``operator=`` is exposed under "assign" name + + * ``operator<<`` is exposed under "__str__" name + +3. Added new call policies: + + * :doc:`as_tuple <../documentation/functions/call_policies/as_tuple>` + + * :doc:`custom_call_policies <../documentation/functions/call_policies/return_range>` + + * :doc:`return_range <../documentation/functions/call_policies/return_range>` + +4. Added an initial support for multi-module development. Now you can mark your + declarations as ``already_exposed`` and :doc:`Py++ <../pyplusplus>` will do the rest. For more + information read :doc:`multi-module development guide <../documentation/multi_module_development>`. + +.. line-separator + +5. :doc:`input_c_buffer <../documentation/functions/transformation/input_c_buffer>` - new functions + transformation, which allows to pass a Python sequence to function, instead of pair of arguments: pointer to buffer and size. + +6. Added ability to control generated "include" directives. Now you can ask :doc:`Py++ <../pyplusplus>` + to include a header file, when it generates code for some declaration. For more + information refers to `inserting code guide`_. + +.. _`inserting code guide` : ../documentation/inserting_code.html#header-files + +7. Code generation improvements: system header files ( Boost.Python or Py++ defined ) + will be included from the generated files only in case the generated code + depends on them. + +8. Performance improvements: Py++ runs 1.5 - 2 times faster, than the previous one. + +9. Added ability to add code before overridden and default function calls. + For more information refer to `member function API documentation`_. + +.. _`member function API documentation` : ../documentation/apidocs/pyplusplus.decl_wrappers.calldef_wrapper.member_function_t-class.html + +10. :doc:`Py++ <../pyplusplus>` will generate documentation for automatically constructed properties. + For more information refer to :doc:`properties guide <../documentation/properties>`. + +11. Added iteration functionality to Boost.Python Indexing Suite V2 ``std::map`` + and ``std::multimap`` containers. + +------------- +Version 0.8.5 +------------- + +1. Added :doc:`Function Transformation <../documentation/functions/transformation/transformation>` feature. + +2. "Py++" introduces new functionality, which allows you to control messages and + warnings: :doc:`how to disable warnings? <../documentation/warnings>`. + +3. Added new algorithm, which controls the registration order of the functions. + See :doc:`registration order document <../documentation/functions/registration_order>` + +4. New "Py++" defined :doc:`return_pointee_value <../documentation/functions/call_policies/return_pointee_value>` + call policy was introduced. + +5. Support for opaque types was added. Read more about this feature `here`__. + +.. __ : ../documentation/functions/call_policies/call_policies.html#special-case + +6. It is possible to configure "Py++" to generate faster ( compilation time ) + code for indexing suite version 2. See API documentation. + +7. The algorithm, which finds all class properties was improved. It provides + user with a better way to control properties creation. A property that would + hide another exposed declaration will not be registered\\created. + +8. Work around for "custom smart pointer as member variable" Boost.Python bug + was introduced. + +9. Bugs fixes and documentation improvement. + + +------------- +Version 0.8.2 +------------- + +1. Interface changes: + + * ``module_builder.module_builder_t.build_code_creator`` method: + argument ``create_casting_constructor`` was removed and deprecation warning + was introduced. + +2. Performance improvements. In some cases you can get x10 performance boost. + Many thanks to Allen Bierbaum! Saving and reusing results of different + :doc:`pygccxml <../../pygccxml/pygccxml>` algorithms and type traits functions achieved this. + +3. Convenience API for registering exception translator was introduced. + +4. :doc:`Py++ <../pyplusplus>` can generate code that uses ``BOOST_PYTHON_FUNCTION_OVERLOADS`` and + ``BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS`` macros. + +5. Treatment to previously generated and no more in-use files was added. By + default :doc:`Py++ <../pyplusplus>` will delete these files, but of course you can redefine this + behaviour. + +6. Generated code changes: + + * ``default_call_policies`` should not be generated any more. + + * For functions that have ``return_value_policy< return_opaque_pointer >`` + call policy, :doc:`Py++ <../pyplusplus>` will automatically generate ``BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID`` + macro. Thank you very much for Gottfried Ganssauge for this idea. + +7. Support for Boost.Python properties was introduced. :doc:`Py++ <../pyplusplus>` implements small + algorithm, that will automatically discover properties, base on naming conventions. + +8. ``decl_wrappers.class_t`` has new function: ``is_wrapper_needed``. This + function explains why :doc:`Py++ <../pyplusplus>` creates class wrapper for exposed class. + +9. Python type traits module was introduce. Today it contains only single function: + + * ``is_immutable`` - returns ``True`` if exposed type is Python immutable type + + + +------------- +Version 0.8.1 +------------- + + +1. Georgiy Dernovoy contributed a patch, which allows :doc:`Py++ <../pyplusplus>` GUI to + save\\load last used header file. + + +2. :doc:`Py++ <../pyplusplus>` improved a lot functionality related to providing feedback to user: + + * every package has its own logger + * only important user messages are written to ``stdout`` + * user messages are clear + +3. Support for Boost.Python indexing suite version 2 was implemented. + +4. Every code creator class took ``parent`` argument in ``__init__`` method. + This argument was removed. ``adopt_creator`` and ``remove_creator`` will + set\unset reference to parent. + +5. Generated code for member and free functions was changed. This changed was + introduced to fix compilation errors on msvc 7.1 compiler. + +6. :doc:`Py++ <../pyplusplus>` generates "stable" code. If header files were not changed, + :doc:`Py++ <../pyplusplus>` will not change any file. + +7. Support for huge classes was added. :doc:`Py++ <../pyplusplus>` is able to split registration + code for the class to multiple cpp files. + +8. User code could be added almost anywhere, without use of low level API. + +9. Generated source files include only header files you passes as an argument + to module builder. + +10. Bug fixes. + +11. Documentation was improved. + + +Project name changed +-------------------- + +In this version the project has been renamed from "pyplusplus" to "Py++". +There were few reasons to this: + +1. I like "Py++" more then "pyplusplus". + +2. "Py++" was the original name of the project: http://mail.python.org/pipermail/c++-sig/2005-July/009280.html + +3. Users always changed the name of the projects. I saw at least 6 different names. + + + +------------- +Version 0.8.0 +------------- + +1. :doc:`Py++ <../pyplusplus>` "user guide" functionality has been improved. Now :doc:`Py++ <../pyplusplus>` + can answer few questions: + + * why this declaration could not be exported + + * why this function could not be overridden from Python + +2. :doc:`Py++ <../pyplusplus>` can suggest an alias for exported classes. + +3. Small redesign has been done - now it is much easier to understand and + maintain code creators, which creates code for C++ functions. + +4. Exception specification is taken into account, when :doc:`Py++ <../pyplusplus>` exports + member functions. + +5. Member variables, that are pointers exported correctly. + +6. Added experimental support for ``vector_indexing_suite``. + +7. Bug fixes. + +------------- +Version 0.7.0 +------------- + +Many thanks to *Matthias Baas* and *Allen Bierbaum*! They contributed so much to +Py++, especially Matthias: + + * New high-level API: :doc:`Py++ <../pyplusplus>` has simple and powerful API + + * Documentation: Matthias and Allen added a lot of documentation strings + + * Bug fixes and performance improvements + +1. New GUI features: + + * It is possible now to see XML generated by GCC-XML. + + * It is possible to use GUI as wizard. It will help you to start with + :doc:`Py++ <../pyplusplus>`, by generating :doc:`Py++ <../pyplusplus>` code. + +2. **Attention - non backward compatible change**. + + ``module_creator.creator_t.__init__`` method has been changed. ``decls`` + argument could be interpreted as + + * list of all declaration to be exported + + * list of top-level declarations. ``creator_t`` should export all + declarations recursively. + + In order to clarify the use of ``decls`` argument new argument ``recursive`` + has been added. By default new value of ``recursive`` is ``False``. + + Guide for users/upgraders: if use are exporting all declaration without + filtering, you should set ``recursive`` argument to ``True``. If you use + ``pygccxml.declarations.filtering.*`` functions, you have nothing to do. + + Sorry for the inconvenience :-(. + +3. Better split of extension module to files. From now the following declarations will + have dedicated file: + + * named enumerations, defined within namespace + * unnamed enumerations and global variables + * free functions + + This functionality will keep the number of instantiated templates within + one file, ``main.cpp``, to be very low. Also it is possible to implement + solution, where ``main.cpp`` file does not contain templates instantiations + at all. + +4. Only constant casting operators could be used with ``implicitly_convertible``. + This bug has been fixed. + +5. Bug exporting non copyable class has been fixed. + +6. Small bug fix - from now file with identical content will not be overwritten. + +7. Boost.Python ``optional`` is now supported and used when a constructor has a + a default argument. + +8. :doc:`Py++ <../pyplusplus>` now generates correct code for hierarchy of abstract classes: + + .. code-block:: c++ + + struct abstract1{ + virtual void do_smth() = 0; + } + + struct abstract2 : public abstract1{ + virtual void do_smth_else() = 0; + } + + struct concrete : public abstract2{ + virtual void do_smth(){}; + virtual void do_smth_else(){}; + } + +9. Logging functionality has been added + +10. New packages ``module_builder``, ``decl_wrappers`` and ``_logging_`` has + been added. + +11. ... + +http://boost.org/libs/python/doc/v2/init.html#optional-spec + +------------- +Version 0.6.0 +------------- + +1. Code repository has been introduced. This repository contains classes + and functions that will help users to export different C++ classes and + declarations. Right now this repository contains two classes: + + * *array_1_t* + + * *const_array_1_t* + + Those classes helps to export static, single dimension arrays. + +2. Code generation has been improved. + +3. Code generation speed has been improved. + +4. If you have Niall Douglas *void\** patch, then you can enjoy from + automatically set call policies. + +5. Bit fields can be accessed from Python + +6. Creating custom code creator example has been added. + +7. Comparison to Pyste has been wrote. + +8. Using this version it is possible to export most of TnFOX Python bindings. + +------------- +Version 0.5.1 +------------- + +1. operator() is now supported. + +2. Special casting operators are renamed( *__int__*, *__str__*, ... ). + +3. Few bug fixes + + +.. _`SourceForge`: http://sourceforge.net/index.php + Modified: pyplusplus_dev/pyplusplus/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/__init__.py 2009-05-17 08:34:14 UTC (rev 1736) +++ pyplusplus_dev/pyplusplus/__init__.py 2009-05-19 17:44:52 UTC (rev 1737) @@ -31,7 +31,7 @@ from _logging_ import multi_line_formatter_t -__version__ = '1.0.0' +__version__ = '1.5.0' import pygccxml if not hasattr( pygccxml, '__revision__' ) or pygccxml.__revision__ < 1080: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-05-17 08:34:27
|
Revision: 1736 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1736&view=rev Author: roman_yakovenko Date: 2009-05-17 08:34:14 +0000 (Sun, 17 May 2009) Log Message: ----------- update docs Modified Paths: -------------- pygccxml_dev/docs/history/history.rest Modified: pygccxml_dev/docs/history/history.rest =================================================================== --- pygccxml_dev/docs/history/history.rest 2009-05-17 08:29:22 UTC (rev 1735) +++ pygccxml_dev/docs/history/history.rest 2009-05-17 08:34:14 UTC (rev 1736) @@ -43,7 +43,10 @@ 6. Bug `[ 2431993 ] pygccxml parses const volatile variable args as just const <http://sourceforge.net/tracker/index.php?func=detail&aid=2431993&group_id=118209&atid=684318>`_ was fixed. +7. Bug `[ 2779781 ] pygccxml reverses array dimensions <https://sourceforge.net/tracker/index.php?func=detail&aid=2779781&group_id=118209&atid=684318>`_ + was fixed. + ----------- Version 1.0 ----------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-05-17 08:29:28
|
Revision: 1735 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1735&view=rev Author: roman_yakovenko Date: 2009-05-17 08:29:22 +0000 (Sun, 17 May 2009) Log Message: ----------- fix 2779781 bug( pygccxml reverses array dimensions ) Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/cpptypes.py pygccxml_dev/unittests/test_all.py Added Paths: ----------- pygccxml_dev/unittests/array_bug_tester.py Modified: pygccxml_dev/pygccxml/declarations/cpptypes.py =================================================================== --- pygccxml_dev/pygccxml/declarations/cpptypes.py 2009-05-17 05:48:47 UTC (rev 1734) +++ pygccxml_dev/pygccxml/declarations/cpptypes.py 2009-05-17 08:29:22 UTC (rev 1735) @@ -446,8 +446,23 @@ doc="returns array size" ) def build_decl_string(self, with_defaults=True): - return self.base.build_decl_string(with_defaults) + '[%d]' % self.size + #return self.base.build_decl_string(with_defaults) + '[%d]' % self.size + return self.__bds_for_multi_dim_arrays( None, with_defaults ) + def __bds_for_multi_dim_arrays(self, parent_dims=None, with_defaults=True): + if parent_dims: + parent_dims.append( self.size ) + else: + parent_dims = [self.size] + + if isinstance( self.base, array_t ): + return self.base.__bds_for_multi_dim_arrays( parent_dims, with_defaults) + else: + tmp = [] + for s in parent_dims: + tmp.append( '[%d]' % s ) + return self.base.build_decl_string(with_defaults) + ''.join( tmp ) + def _clone_impl( self ): return array_t( self.base.clone(), self.size ) Added: pygccxml_dev/unittests/array_bug_tester.py =================================================================== --- pygccxml_dev/unittests/array_bug_tester.py (rev 0) +++ pygccxml_dev/unittests/array_bug_tester.py 2009-05-17 08:29:22 UTC (rev 1735) @@ -0,0 +1,58 @@ +# Copyright 2004-2008 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 unittest +import autoconfig +import parser_test_case + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations + + +class tester_t( parser_test_case.parser_test_case_t ): + def __init__(self, *args): + parser_test_case.parser_test_case_t.__init__(self, *args) + + def test1(self): + code = 'int aaaa[2][3][4][5];' + src_reader = parser.source_reader_t( self.config ) + global_ns = declarations.get_global_namespace( src_reader.read_string( code ) ) + aaaa_type = global_ns.var('aaaa').type + self.failUnless( 'int[2][3][4][5]' == aaaa_type.decl_string, aaaa_type.decl_string ) + + def test2(self): + code = 'int* aaaa[2][3][4][5];' + src_reader = parser.source_reader_t( self.config ) + global_ns = declarations.get_global_namespace( src_reader.read_string( code ) ) + aaaa_type = global_ns.var('aaaa').type + self.failUnless( 'int *[2][3][4][5]' == aaaa_type.decl_string, aaaa_type.decl_string ) + + def test3(self): + code = 'int aaaa[2];' + src_reader = parser.source_reader_t( self.config ) + global_ns = declarations.get_global_namespace( src_reader.read_string( code ) ) + aaaa_type = global_ns.var('aaaa').type + self.failUnless( 'int[2]' == aaaa_type.decl_string, aaaa_type.decl_string ) + + def test4(self): + code = 'struct xyz{}; xyz aaaa[2][3];' + src_reader = parser.source_reader_t( self.config ) + global_ns = declarations.get_global_namespace( src_reader.read_string( code ) ) + aaaa_type = global_ns.var('aaaa').type + self.failUnless( '::xyz[2][3]' == aaaa_type.decl_string, aaaa_type.decl_string ) + + +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: pygccxml_dev/unittests/test_all.py =================================================================== --- pygccxml_dev/unittests/test_all.py 2009-05-17 05:48:47 UTC (rev 1734) +++ pygccxml_dev/unittests/test_all.py 2009-05-17 08:29:22 UTC (rev 1735) @@ -54,6 +54,7 @@ import undname_creator_tester import calling_convention_tester import const_volatile_arg_tester +import array_bug_tester testers = [ decl_string_tester @@ -104,6 +105,7 @@ , undname_creator_tester , calling_convention_tester , const_volatile_arg_tester + , array_bug_tester ] def create_suite(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-05-17 05:48:52
|
Revision: 1734 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1734&view=rev Author: roman_yakovenko Date: 2009-05-17 05:48:47 +0000 (Sun, 17 May 2009) Log Message: ----------- adding new test case Modified Paths: -------------- pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/return_ref_to_ptr_to_be_exported.hpp pyplusplus_dev/unittests/return_ref_to_ptr_tester.py Added: pyplusplus_dev/unittests/data/return_ref_to_ptr_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/return_ref_to_ptr_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/return_ref_to_ptr_to_be_exported.hpp 2009-05-17 05:48:47 UTC (rev 1734) @@ -0,0 +1,27 @@ +// Copyright 2004-2008 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 __return_ref_to_ptr_to_be_exported_hpp__ +#define __return_ref_to_ptr_to_be_exported_hpp__ + +struct number_t{ + int m_value; +}; + + +struct numbers_t{ + numbers_t() + : m_number( new number_t() ) + {} + + typedef number_t * value_type; + const value_type& operator[]( int index ) const { + return m_number; + } + number_t* m_number; +}; + + +#endif//__return_ref_to_ptr_to_be_exported_hpp__ Added: pyplusplus_dev/unittests/return_ref_to_ptr_tester.py =================================================================== --- pyplusplus_dev/unittests/return_ref_to_ptr_tester.py (rev 0) +++ pyplusplus_dev/unittests/return_ref_to_ptr_tester.py 2009-05-17 05:48:47 UTC (rev 1734) @@ -0,0 +1,37 @@ +# Copyright 2004-2008 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 pyplusplus.module_builder import call_policies + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'return_ref_to_ptr' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + mb.class_('numbers_t').operator('[]').call_policies = call_policies.return_internal_reference() + + def run_tests(self, module): + numbers = module.numbers_t() + n = numbers[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 2009-05-17 04:37:57 UTC (rev 1733) +++ pyplusplus_dev/unittests/test_all.py 2009-05-17 05:48:47 UTC (rev 1734) @@ -116,6 +116,7 @@ import derive_from_deque_tester import std_pair_tester import mem_var_compile_error_bug_tester +import return_ref_to_ptr_tester #import ogre_generate_tester testers = [ @@ -222,6 +223,7 @@ , derive_from_deque_tester , std_pair_tester , mem_var_compile_error_bug_tester + , return_ref_to_ptr_tester # , ogre_generate_tester too much time ] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-05-17 04:38:02
|
Revision: 1733 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1733&view=rev Author: roman_yakovenko Date: 2009-05-17 04:37:57 +0000 (Sun, 17 May 2009) Log Message: ----------- adding new test case Modified Paths: -------------- pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/mem_var_compile_error_bug_to_be_exported.hpp pyplusplus_dev/unittests/mem_var_compile_error_bug_tester.py Added: pyplusplus_dev/unittests/data/mem_var_compile_error_bug_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/mem_var_compile_error_bug_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/mem_var_compile_error_bug_to_be_exported.hpp 2009-05-17 04:37:57 UTC (rev 1733) @@ -0,0 +1,73 @@ +// Copyright 2004-2008 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 __mem_var_compile_error_bug_to_be_exported_hpp__ +#define __mem_var_compile_error_bug_to_be_exported_hpp__ + +#include <map> + +namespace sptCore +{ + +//! \brief Representation of connection between two 3d points +//! \author ShaXbee +class Path +{ + +public: + //! Return reversed path + Path* reverse() const { return NULL; } + + float length() const { return _length; } + float frontRoll() const { return _frontRoll; } + float backRoll() const { return _backRoll; } + + typedef std::pair<Path*, Path*> Pair; + +private: + float _length; + float _frontRoll; + float _backRoll; + +}; // class sptCore::Path + +//! \brief Abstract representation of Tracking in Scenery +//! \author Zbyszek "ShaXbee" Mandziejewicz +class RailTracking +{ + +public: + virtual ~RailTracking() { }; + + //! Get tracking exit for given entry point + //! Throws UnknownEntryException if there is no exit for given entry + virtual void getExit() const = 0; + + //! Get path that begins at given position + //! Throws UnknownEntryException if there is no path for given entry + virtual Path* getPath() const = 0; + +}; // class sptCore::RailTracking + +class Track: public RailTracking +{ + +public: + virtual ~Track() { }; + + virtual void getExit() const{} + virtual Path* getPath() const{return NULL;} + + virtual Path* getDefaultPath() const { return NULL; }; + +private: + // Py++: Removing this line makes wrapper compilable + Path::Pair _path; + +}; + +} // namespace sptCore + +#endif//__mem_var_compile_error_bug_to_be_exported_hpp__ Added: pyplusplus_dev/unittests/mem_var_compile_error_bug_tester.py =================================================================== --- pyplusplus_dev/unittests/mem_var_compile_error_bug_tester.py (rev 0) +++ pyplusplus_dev/unittests/mem_var_compile_error_bug_tester.py 2009-05-17 04:37:57 UTC (rev 1733) @@ -0,0 +1,47 @@ +# Copyright 2004-2008 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 pyplusplus.module_builder import call_policies + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'mem_var_compile_error_bug' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + opaqueDecls = { + 'Path': ['reverse'], + 'RailTracking': ['getPath'], + 'Track': ['getPath', 'getDefaultPath'] + } + + mb.class_('Path').include() + + for decl in opaqueDecls.items(): + cls = mb.class_(decl[0]) + for methodName in decl[1]: + cls.member_function(methodName).call_policies = call_policies.return_value_policy(call_policies.return_opaque_pointer); + + def run_tests(self, module): + pass + +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 2009-05-14 12:04:50 UTC (rev 1732) +++ pyplusplus_dev/unittests/test_all.py 2009-05-17 04:37:57 UTC (rev 1733) @@ -1,340 +1,342 @@ -# Copyright 2004-2008 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 re -import sys -import time -import shutil - -import autoconfig - -import classes_tester -import abstract_classes_tester -import algorithms_tester -import module_body_tester -import enums_tester -import free_functions_tester -import fundamental_tester_base -import unnamed_enums_tester -import namespaces_tester -import classes_tester -import global_variables_tester -import member_variables_tester -import member_functions_tester -import call_policies_tester -import pointer_to_function_as_argument -import operators_tester -import abstract_tester -import statics_tester -import regression1_tester -import casting_tester -import finalizables_tester -import free_operators_tester -import operators_bug_tester -import smart_pointers_tester -import special_operators_tester -import module_properties_tester -import internal_classes_tester -import temporary_variable_tester -import recursive_tester -import class_order_tester -import class_order2_tester -import class_order3_tester -import class_order4_tester -import noncopyable_tester -import regression2_tester -import regression3_tester -import optional_tester -import index_operator_tester -import dwrapper_printer_tester -import mdecl_wrapper_tester -import user_text_tester -import free_function_ignore_bug_tester -import optional_bug_tester -import pointer_as_arg_tester -import factory_tester -import private_assign_tester -import protected_tester -import protected_bug_tester -import indexing_suites_tester -import indexing_suites2_tester -import hierarchy3_tester -import vector3_tester -import default_args_tester -import unnamed_classes_tester -import cppexceptions_tester -import no_init_tester -import overloads_macro_tester -import split_module_tester -import properties_tester -import arrays_bug_tester -import convenience_tester -import inner_class_bug_tester -import declarations_order_bug_tester -import function_transformations_tester -import throw_tester -import duplicate_aliases_tester -import non_overridable_tester -import exposed_decls_db_tester -import already_exposed_tester -import bpmodule_tester -import custom_smart_ptr_classes_tester -import custom_string_tester -import final_classes_tester -import templates_tester -import deepcopy_tester -import override_bug_tester -import mem_fun_with_exception_tester -import overriden_virtual_functions_bug_tester -import split_module_bug_tester -import tnfox_bugs_tester -import transfer_ownership_old_tester -import transfer_ownership_tester -import unicode_bug -import include_exclude_bug_tester -import vector_with_shared_data_tester -import constructors_bug_tester -import precompiled_header_tester -import balanced_files_tester -import ft_inout_tester -import split_module_indexing_suite_bug_tester -import inner_tmpl_class_tester -import bug_covariant_returns_tester -import embeded_tester -import unions_tester -import cp_return_addressof_tester -import make_constructor_tester -import return_auto_ptr_tester -import ctypes_tester -import refee_refer_tester -import indexing_suites_v2_bug_tester -import virtual_inheritance_tester -import indexing_suite_v1_tester -import derive_from_deque_tester -import std_pair_tester -#import ogre_generate_tester - -testers = [ - algorithms_tester - , module_body_tester - , enums_tester - , free_functions_tester - , unnamed_enums_tester - , namespaces_tester - , classes_tester - , global_variables_tester - , member_variables_tester - , member_functions_tester - , call_policies_tester - , pointer_to_function_as_argument - , operators_tester - , abstract_tester - , statics_tester - , regression1_tester - , casting_tester - , finalizables_tester - , free_operators_tester - , operators_bug_tester - , smart_pointers_tester - , special_operators_tester - , module_properties_tester - , internal_classes_tester - , temporary_variable_tester - , recursive_tester - , class_order_tester - , noncopyable_tester - , regression2_tester - , regression3_tester - , class_order2_tester - , class_order3_tester - , class_order4_tester - , optional_tester - , index_operator_tester - , dwrapper_printer_tester - , mdecl_wrapper_tester - , user_text_tester - , free_function_ignore_bug_tester - , optional_bug_tester - , pointer_as_arg_tester - , factory_tester - , private_assign_tester - , protected_tester - , indexing_suites_tester - , hierarchy3_tester - , vector3_tester - , default_args_tester - , abstract_classes_tester - , indexing_suites2_tester - , unnamed_classes_tester - , cppexceptions_tester - , no_init_tester - , overloads_macro_tester - , split_module_tester - , properties_tester - , arrays_bug_tester - , convenience_tester - , inner_class_bug_tester - , declarations_order_bug_tester - , function_transformations_tester - , throw_tester - , duplicate_aliases_tester - , non_overridable_tester - , exposed_decls_db_tester - , already_exposed_tester - , bpmodule_tester - , custom_smart_ptr_classes_tester - , custom_string_tester - , final_classes_tester - , mem_fun_with_exception_tester - , overriden_virtual_functions_bug_tester - , split_module_bug_tester - , tnfox_bugs_tester - , transfer_ownership_old_tester - , transfer_ownership_tester - , unicode_bug - , include_exclude_bug_tester - , vector_with_shared_data_tester - , templates_tester - , constructors_bug_tester - , precompiled_header_tester - , balanced_files_tester - , ft_inout_tester - , deepcopy_tester - , override_bug_tester - , split_module_indexing_suite_bug_tester - , inner_tmpl_class_tester - , bug_covariant_returns_tester - , embeded_tester - , unions_tester - , cp_return_addressof_tester - , make_constructor_tester - , return_auto_ptr_tester - , protected_bug_tester - , ctypes_tester - , refee_refer_tester - , indexing_suites_v2_bug_tester - , virtual_inheritance_tester - , indexing_suite_v1_tester - , derive_from_deque_tester - , std_pair_tester -# , ogre_generate_tester too much time -] - -class module_runner_t( object ): - bottom_line_re = re.compile( 'Ran\s(?P<num_of_tests>\d+)\stests?\sin\s(?P<seconds>\d+\.?\d*)s') - test_name_re = re.compile( '(?P<name>.+ \(.+\))\s\.\.\.' ) - failed_test_re = re.compile( 'FAIL\:\s(?P<name>.+ \(.+\))' ) - error_test_re = re.compile( 'ERROR\:\s(?P<name>.+ \(.+\))' ) - - def __init__( self, module ): - self.module = module - self.output = None - - self.test_results = {} #test name : result - self.num_of_tests = 0 - self.total_run_time = 0 - self.exit_status = None - - def __call__( self ): - print os.linesep, '<*> start %s tester' % os.path.basename( self.module.__file__) - - test_file_name = self.module.__file__ - if test_file_name.endswith( 'pyc' ): - test_file_name = test_file_name[:-1] - command_line = ' '.join([ '"%s"' % sys.executable, test_file_name ]) - input_, output = os.popen4( command_line ) - input_.close() - report = [] - while True: - data = output.readline() - report.append( data ) - if not data: - break - else: - print data, - self.output = ''.join( report ) - self.exit_status = output.close() - self.__update() - print '<***> finish %s tester' % os.path.basename( self.module.__file__) - - def __create_unique_name( self, name ): - if '__main__.' in name: - name = name.replace( '__main__', os.path.basename( self.module.__file__)[:-4] ) - return name - - def __update( self ): - match_found = self.bottom_line_re.search( self.output ) - if match_found: - self.num_of_tests += int( match_found.group( 'num_of_tests' ) ) - self.total_run_time += float( match_found.group( 'seconds' ) ) - - uname = self.__create_unique_name - for match_found in self.test_name_re.finditer( self.output ): - self.test_results[ uname( match_found.group( 'name' ) ) ] = 'ok' - - for match_found in self.failed_test_re.finditer( self.output ): - hint = '' - if hasattr( self.module, 'EXPECTED_FAILURE_INFO' ): - hint = " - EXPECTED. " + self.module.EXPECTED_FAILURE_INFO - self.test_results[ uname( match_found.group( 'name' ) ) ] = 'FAIL' + hint - - for match_found in self.error_test_re.finditer( self.output ): - hint = '' - if hasattr( self.module, 'EXPECTED_ERROR_INFO' ): - hint = " - EXPECTED. " + self.module.EXPECTED_ERROR_INFO - self.test_results[ uname( match_found.group( 'name' ) ) ] = 'ERROR' + hint - - assert( self.num_of_tests == len( self.test_results ) ) - - -class process_tester_runner_t( object ): - - def __init__( self, modules ): - self.__m_runners = [ module_runner_t(m) for m in modules ] - self.__total_time = 0 - - def __dump_statistics( self ): - num_of_tests = 0 - test_results = {} - total_tests_only_run_time = 0 - exit_status = 0 - for stat in self.__m_runners: - num_of_tests += stat.num_of_tests - total_tests_only_run_time += stat.total_run_time - test_results.update( stat.test_results ) - exit_status = max( exit_status, stat.exit_status ) - test_failed = len( filter( lambda result: result != 'ok', test_results.values() ) ) - - for name, result in test_results.iteritems(): - if result != 'ok': - print '! ', - print name, ' - ', result - print '----------------------------------------------------------------------' - print 'Final exit status: ', exit_status - print 'Ran %d test in %fs. Multi-processing overhead: %fs.' \ - % ( num_of_tests, self.__total_time, self.__total_time - total_tests_only_run_time ) - print ' ' - if test_failed: - print os.linesep.join(['FAILED (failures=%d)' % test_failed, 'False']) - else: - print 'ok' - - def __call__( self ): - start_time = time.time() - for index, tester in enumerate( self.__m_runners ): - print '\n\n{[<@>]}running tests complition: %d%%' % int( index * 100.0 // len(self.__m_runners) ) - print '--------------------------------^^^^^\n\n' - if os.path.exists( os.path.join( autoconfig.build_directory, 'indexing_suite' ) ): - shutil.rmtree( os.path.join( autoconfig.build_directory, 'indexing_suite' ) ) - tester() - self.__total_time = time.time() - start_time - self.__dump_statistics() - - -if __name__ == "__main__": - runner = process_tester_runner_t( testers ) - runner() - +# Copyright 2004-2008 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 re +import sys +import time +import shutil + +import autoconfig + +import classes_tester +import abstract_classes_tester +import algorithms_tester +import module_body_tester +import enums_tester +import free_functions_tester +import fundamental_tester_base +import unnamed_enums_tester +import namespaces_tester +import classes_tester +import global_variables_tester +import member_variables_tester +import member_functions_tester +import call_policies_tester +import pointer_to_function_as_argument +import operators_tester +import abstract_tester +import statics_tester +import regression1_tester +import casting_tester +import finalizables_tester +import free_operators_tester +import operators_bug_tester +import smart_pointers_tester +import special_operators_tester +import module_properties_tester +import internal_classes_tester +import temporary_variable_tester +import recursive_tester +import class_order_tester +import class_order2_tester +import class_order3_tester +import class_order4_tester +import noncopyable_tester +import regression2_tester +import regression3_tester +import optional_tester +import index_operator_tester +import dwrapper_printer_tester +import mdecl_wrapper_tester +import user_text_tester +import free_function_ignore_bug_tester +import optional_bug_tester +import pointer_as_arg_tester +import factory_tester +import private_assign_tester +import protected_tester +import protected_bug_tester +import indexing_suites_tester +import indexing_suites2_tester +import hierarchy3_tester +import vector3_tester +import default_args_tester +import unnamed_classes_tester +import cppexceptions_tester +import no_init_tester +import overloads_macro_tester +import split_module_tester +import properties_tester +import arrays_bug_tester +import convenience_tester +import inner_class_bug_tester +import declarations_order_bug_tester +import function_transformations_tester +import throw_tester +import duplicate_aliases_tester +import non_overridable_tester +import exposed_decls_db_tester +import already_exposed_tester +import bpmodule_tester +import custom_smart_ptr_classes_tester +import custom_string_tester +import final_classes_tester +import templates_tester +import deepcopy_tester +import override_bug_tester +import mem_fun_with_exception_tester +import overriden_virtual_functions_bug_tester +import split_module_bug_tester +import tnfox_bugs_tester +import transfer_ownership_old_tester +import transfer_ownership_tester +import unicode_bug +import include_exclude_bug_tester +import vector_with_shared_data_tester +import constructors_bug_tester +import precompiled_header_tester +import balanced_files_tester +import ft_inout_tester +import split_module_indexing_suite_bug_tester +import inner_tmpl_class_tester +import bug_covariant_returns_tester +import embeded_tester +import unions_tester +import cp_return_addressof_tester +import make_constructor_tester +import return_auto_ptr_tester +import ctypes_tester +import refee_refer_tester +import indexing_suites_v2_bug_tester +import virtual_inheritance_tester +import indexing_suite_v1_tester +import derive_from_deque_tester +import std_pair_tester +import mem_var_compile_error_bug_tester +#import ogre_generate_tester + +testers = [ + algorithms_tester + , module_body_tester + , enums_tester + , free_functions_tester + , unnamed_enums_tester + , namespaces_tester + , classes_tester + , global_variables_tester + , member_variables_tester + , member_functions_tester + , call_policies_tester + , pointer_to_function_as_argument + , operators_tester + , abstract_tester + , statics_tester + , regression1_tester + , casting_tester + , finalizables_tester + , free_operators_tester + , operators_bug_tester + , smart_pointers_tester + , special_operators_tester + , module_properties_tester + , internal_classes_tester + , temporary_variable_tester + , recursive_tester + , class_order_tester + , noncopyable_tester + , regression2_tester + , regression3_tester + , class_order2_tester + , class_order3_tester + , class_order4_tester + , optional_tester + , index_operator_tester + , dwrapper_printer_tester + , mdecl_wrapper_tester + , user_text_tester + , free_function_ignore_bug_tester + , optional_bug_tester + , pointer_as_arg_tester + , factory_tester + , private_assign_tester + , protected_tester + , indexing_suites_tester + , hierarchy3_tester + , vector3_tester + , default_args_tester + , abstract_classes_tester + , indexing_suites2_tester + , unnamed_classes_tester + , cppexceptions_tester + , no_init_tester + , overloads_macro_tester + , split_module_tester + , properties_tester + , arrays_bug_tester + , convenience_tester + , inner_class_bug_tester + , declarations_order_bug_tester + , function_transformations_tester + , throw_tester + , duplicate_aliases_tester + , non_overridable_tester + , exposed_decls_db_tester + , already_exposed_tester + , bpmodule_tester + , custom_smart_ptr_classes_tester + , custom_string_tester + , final_classes_tester + , mem_fun_with_exception_tester + , overriden_virtual_functions_bug_tester + , split_module_bug_tester + , tnfox_bugs_tester + , transfer_ownership_old_tester + , transfer_ownership_tester + , unicode_bug + , include_exclude_bug_tester + , vector_with_shared_data_tester + , templates_tester + , constructors_bug_tester + , precompiled_header_tester + , balanced_files_tester + , ft_inout_tester + , deepcopy_tester + , override_bug_tester + , split_module_indexing_suite_bug_tester + , inner_tmpl_class_tester + , bug_covariant_returns_tester + , embeded_tester + , unions_tester + , cp_return_addressof_tester + , make_constructor_tester + , return_auto_ptr_tester + , protected_bug_tester + , ctypes_tester + , refee_refer_tester + , indexing_suites_v2_bug_tester + , virtual_inheritance_tester + , indexing_suite_v1_tester + , derive_from_deque_tester + , std_pair_tester + , mem_var_compile_error_bug_tester +# , ogre_generate_tester too much time +] + +class module_runner_t( object ): + bottom_line_re = re.compile( 'Ran\s(?P<num_of_tests>\d+)\stests?\sin\s(?P<seconds>\d+\.?\d*)s') + test_name_re = re.compile( '(?P<name>.+ \(.+\))\s\.\.\.' ) + failed_test_re = re.compile( 'FAIL\:\s(?P<name>.+ \(.+\))' ) + error_test_re = re.compile( 'ERROR\:\s(?P<name>.+ \(.+\))' ) + + def __init__( self, module ): + self.module = module + self.output = None + + self.test_results = {} #test name : result + self.num_of_tests = 0 + self.total_run_time = 0 + self.exit_status = None + + def __call__( self ): + print os.linesep, '<*> start %s tester' % os.path.basename( self.module.__file__) + + test_file_name = self.module.__file__ + if test_file_name.endswith( 'pyc' ): + test_file_name = test_file_name[:-1] + command_line = ' '.join([ '"%s"' % sys.executable, test_file_name ]) + input_, output = os.popen4( command_line ) + input_.close() + report = [] + while True: + data = output.readline() + report.append( data ) + if not data: + break + else: + print data, + self.output = ''.join( report ) + self.exit_status = output.close() + self.__update() + print '<***> finish %s tester' % os.path.basename( self.module.__file__) + + def __create_unique_name( self, name ): + if '__main__.' in name: + name = name.replace( '__main__', os.path.basename( self.module.__file__)[:-4] ) + return name + + def __update( self ): + match_found = self.bottom_line_re.search( self.output ) + if match_found: + self.num_of_tests += int( match_found.group( 'num_of_tests' ) ) + self.total_run_time += float( match_found.group( 'seconds' ) ) + + uname = self.__create_unique_name + for match_found in self.test_name_re.finditer( self.output ): + self.test_results[ uname( match_found.group( 'name' ) ) ] = 'ok' + + for match_found in self.failed_test_re.finditer( self.output ): + hint = '' + if hasattr( self.module, 'EXPECTED_FAILURE_INFO' ): + hint = " - EXPECTED. " + self.module.EXPECTED_FAILURE_INFO + self.test_results[ uname( match_found.group( 'name' ) ) ] = 'FAIL' + hint + + for match_found in self.error_test_re.finditer( self.output ): + hint = '' + if hasattr( self.module, 'EXPECTED_ERROR_INFO' ): + hint = " - EXPECTED. " + self.module.EXPECTED_ERROR_INFO + self.test_results[ uname( match_found.group( 'name' ) ) ] = 'ERROR' + hint + + assert( self.num_of_tests == len( self.test_results ) ) + + +class process_tester_runner_t( object ): + + def __init__( self, modules ): + self.__m_runners = [ module_runner_t(m) for m in modules ] + self.__total_time = 0 + + def __dump_statistics( self ): + num_of_tests = 0 + test_results = {} + total_tests_only_run_time = 0 + exit_status = 0 + for stat in self.__m_runners: + num_of_tests += stat.num_of_tests + total_tests_only_run_time += stat.total_run_time + test_results.update( stat.test_results ) + exit_status = max( exit_status, stat.exit_status ) + test_failed = len( filter( lambda result: result != 'ok', test_results.values() ) ) + + for name, result in test_results.iteritems(): + if result != 'ok': + print '! ', + print name, ' - ', result + print '----------------------------------------------------------------------' + print 'Final exit status: ', exit_status + print 'Ran %d test in %fs. Multi-processing overhead: %fs.' \ + % ( num_of_tests, self.__total_time, self.__total_time - total_tests_only_run_time ) + print ' ' + if test_failed: + print os.linesep.join(['FAILED (failures=%d)' % test_failed, 'False']) + else: + print 'ok' + + def __call__( self ): + start_time = time.time() + for index, tester in enumerate( self.__m_runners ): + print '\n\n{[<@>]}running tests complition: %d%%' % int( index * 100.0 // len(self.__m_runners) ) + print '--------------------------------^^^^^\n\n' + if os.path.exists( os.path.join( autoconfig.build_directory, 'indexing_suite' ) ): + shutil.rmtree( os.path.join( autoconfig.build_directory, 'indexing_suite' ) ) + tester() + self.__total_time = time.time() - start_time + self.__dump_statistics() + + +if __name__ == "__main__": + runner = process_tester_runner_t( testers ) + runner() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |