[pygccxml-commit] SF.net SVN: pygccxml:[1558] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2009-01-11 21:17:48
|
Revision: 1558
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1558&view=rev
Author: roman_yakovenko
Date: 2009-01-11 21:17:40 +0000 (Sun, 11 Jan 2009)
Log Message:
-----------
gmplis almost works
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/dependencies.py
pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py
pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py
pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py
pyplusplus_dev/examples/gmplib_dev/test.py
pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py
pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py
pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py
Modified: pygccxml_dev/pygccxml/declarations/dependencies.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/dependencies.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pygccxml_dev/pygccxml/declarations/dependencies.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -61,7 +61,7 @@
return None
@staticmethod
- def they_depend_on_me( decl ):
+ def i_depend_on_them( decl ):
"""returns set of declarations. every item in the returned set, depends on a
declaration from the input"""
import class_declaration #prevent cyclic imports
@@ -76,7 +76,7 @@
return to_be_included
@staticmethod
- def they_depend_on_us( decls ):
+ def we_depend_on_them( decls ):
"""returns set of declarations. every item in the returned set, depends on a
declaration from the input"""
import class_declaration #prevent cyclic imports
Modified: pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py
===================================================================
--- pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -24,8 +24,12 @@
#introduces define, which aliass __gmpy to gmpy
for f in mb.calldefs( lambda x: x.name.startswith('__gmp') ):
f.alias = f.name[2:]
-#enums
+#there is a bug in "include" algorithm - I need to wrote DFS
+mb.class_( '_IO_marker' ).include()
+
+#include should work as expected - include only exported function
+
#~ mb.print_declarations()
mb.build_code_creator( project_env.gmp.shared_library_file )
mb.write_module( os.path.join( project_env.gmp.generated_code_dir, '__init__.py' ) )
Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py
===================================================================
--- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -617,9 +617,16 @@
"__gmpf_init_set_str" : "extern int __gmpf_init_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]",
}
+class gmp_randalg_t( ctypes_utils.Enumeration ):
+ GMP_RAND_ALG_DEFAULT = 0
+ GMP_RAND_ALG_LC = 0
+
class _IO_FILE(ctypes.Structure):
"""class _IO_FILE"""
+class _IO_marker(ctypes.Structure):
+ """class _IO_marker"""
+
class __gmp_randstate_struct(ctypes.Structure):
"""class __gmp_randstate_struct"""
@@ -682,10 +689,16 @@
("_mp_den", __mpz_struct),
]
+_IO_marker._fields_ = [ #class _IO_marker
+ ("_next", ctypes.POINTER( _IO_marker )),
+ ("_sbuf", ctypes.POINTER( _IO_FILE )),
+ ("_pos", ctypes.c_int),
+]
+
__gmp_randstate_struct._fields_ = [ #class __gmp_randstate_struct
("_mp_seed", ( __mpz_struct * 1 )),
("_mp_alg", gmp_randalg_t),
- ("_mp_algdata", __gmp_randstate_struct.),
+ ("_mp_algdata", ctypes.c_int),
]
gmpq_add_type = ctypes.CFUNCTYPE( None, ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ) )
Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py
===================================================================
--- pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -129,3 +129,7 @@
def multi_method( self, restype=None ):
return multi_method_registry_t( self, restype )
+
+#take a look on http://code.activestate.com/recipes/413486/
+Enumeration = ctypes.c_int
+
Modified: pyplusplus_dev/examples/gmplib_dev/test.py
===================================================================
--- pyplusplus_dev/examples/gmplib_dev/test.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/examples/gmplib_dev/test.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -1,4 +1,15 @@
+import ctypes
import pygmplib as gmp
-mpz = gmp.__mpz_struct()
+integ1 = ctypes.pointer( gmp.__mpz_struct() )
+integ2 = ctypes.pointer( gmp.__mpz_struct() )
+gmp.gmpz_init_set_ui( integ1, ctypes.c_ulong( 1900 ) )
+print 'integ1 : ', gmp.gmpz_get_si( integ1 )
+gmp.gmpz_init_set_ui( integ2, ctypes.c_ulong( 77 ) )
+print 'integ2 : ', gmp.gmpz_get_si( integ2 )
+
+gmp.gmpz_add( integ1, integ1, integ2 )
+
+print 'integ1 : ', gmp.gmpz_get_si( integ1 )
+
Modified: pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -137,6 +137,5 @@
#take a look on http://code.activestate.com/recipes/413486/
-class Enumeration( object ):
- pass
+Enumeration = ctypes.c_int
"""
Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -29,6 +29,7 @@
self.__library_path = library_path
self.__exported_symbols = exported_symbols
+ self.__exported_decls = set( exported_symbols.itervalues() )
self.module = code_creators.ctypes_module_t( global_ns )
self.__dependencies_manager = dependencies_manager.manager_t(self.decl_logger)
@@ -68,6 +69,8 @@
def __should_generate_code( self, decl ):
if decl.ignore or decl.already_exposed:
return False
+ if isinstance( decl, declarations.calldef_t ):
+ return decl in self.__exported_decls
return True
Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-11 19:18:50 UTC (rev 1557)
+++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-11 21:17:40 UTC (rev 1558)
@@ -79,33 +79,38 @@
return decls_package.matcher.get_single( decls_package.namespace_matcher_t( name='::' )
, decls )
+ def __include_dependencies( self, decl):
+ i_depend_on_them = decls_package.dependency_info_t.i_depend_on_them
+ decls_traits = ( decls_package.class_traits, decls_package.class_declaration_traits, decls_package.enum_traits )
+ for dependency in i_depend_on_them( decl ):
+ self.logger.debug( 'discovered dependency %s' % str(dependency) )
+ for traits in decls_traits:
+ if not traits.is_my_case( dependency ):
+ continue
+ self.logger.debug( 'discovered dependency %s - included' % str(dependency) )
+ dd = traits.get_declaration( dependency )
+ dd.ignore = False
+
+ def __include_parent_classes( self, decl ):
+ self.logger.debug( 'including decl %s' % str(decl) )
+ parent = decl.parent
+ while True:
+ if isinstance( parent, decls_package.namespace_t ):
+ break
+ else:
+ self.logger.debug( 'including parent class %s' % str(parent) )
+ parent.ignore = False
+ parent = parent.parent
+
def __include_declarations( self ):
self.global_ns.exclude()
#include exported declarations
included_decls = set( self.__blob2decl.itervalues() )
-
- they_depend_on_me = decls_package.dependency_info_t.they_depend_on_me
+ #include dependencies
for d in included_decls:
d.include()
- self.logger.debug( 'including decl %s' % str(d) )
- parent = d.parent
- while True:
- if isinstance( parent, decls_package.namespace_t ):
- break
- else:
- self.logger.debug( 'including parent class %s' % str(parent) )
- parent.ignore = False
- parent = parent.parent
- for dependency in they_depend_on_me( d ):
- self.logger.debug( 'discovered dependency %s' % str(dependency) )
- #include declarations, on which exported declarations depend
- #I need this for classes, referenced by function arguments
- decls_traits = ( decls_package.class_traits, decls_package.class_declaration_traits, decls_package.enum_traits )
- for traits in decls_traits:
- if traits.is_my_case( dependency ):
- self.logger.debug( 'discovered dependency %s - included' % str(dependency) )
- traits.get_declaration( dependency ).ignore = False
-
+ self.__include_parent_classes( d )
+ self.__include_dependencies( d )
self.logger.debug( 'including decl %s - done' % str(d) )
def build_code_creator( self, library_path, doc_extractor=None ):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|