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.
|