Update of /cvsroot/pygccxml/source/pyplusplus/decl_wrappers
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28510/pyplusplus/decl_wrappers
Modified Files:
namespace_wrapper.py scopedef_wrapper.py
Log Message:
fixing select API to be more user friendly
Index: namespace_wrapper.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/decl_wrappers/namespace_wrapper.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** namespace_wrapper.py 29 Mar 2006 04:23:45 -0000 1.4
--- namespace_wrapper.py 30 Mar 2006 05:56:17 -0000 1.5
***************
*** 12,36 ****
declarations.namespace_t.__init__(self, *arguments, **keywords )
! def namespace( self, *args, **keywds ):
! keywds['decl_type'] = declarations.namespace_t
! return self._find_single( declarations.namespace_matcher_t, *args, **keywds )
def namespaces( self, *args, **keywds ):
! keywds['decl_type'] = declarations.namespace_t
! return self._find_multiple( declarations.namespace_matcher_t, *args, **keywds )
! def free_function( self, *args, **keywds ):
! keywds['decl_type'] = declarations.free_function_t
! return self._find_single( declarations.calldef_matcher_t, *args, **keywds )
! def free_functions( self, *args, **keywds ):
! keywds['decl_type'] = declarations.free_function_t
! return self._find_multiple( declarations.calldef_matcher_t, *args, **keywds )
! def free_operator( self, *args, **keywds ):
! keywds['decl_type'] = declarations.free_operator_t
! return self._find_single( declarations.operator_matcher_t, *args, **keywds )
! def free_operators( self, *args, **keywds ):
! keywds['decl_type'] = declarations.free_operator_t
! return self._find_multiple( declarations.operator_matcher_t, *args, **keywds )
--- 12,70 ----
declarations.namespace_t.__init__(self, *arguments, **keywords )
! def namespace( self, name=None, function=None, recursive=None ):
! return self._find_single( declarations.namespace_matcher_t
! , name=name
! , function=function
! , recursive=recursive )
def namespaces( self, *args, **keywds ):
! return self._find_multiple( declarations.namespace_matcher_t
! , name=name
! , function=function
! , recursive=recursive )
! def free_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.free_function_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def free_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.free_function_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def free_operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=declarations.free_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def free_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=declarations.free_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
Index: scopedef_wrapper.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/decl_wrappers/scopedef_wrapper.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** scopedef_wrapper.py 29 Mar 2006 07:02:36 -0000 1.6
--- scopedef_wrapper.py 30 Mar 2006 05:56:17 -0000 1.7
***************
*** 40,44 ****
--- 40,53 ----
return types
+ def clear_optimizer(self):
+ self.__optimized = False
+ self.__type2decls = {}
+ self.__type2name2decls = {}
+ self.__type2decls_nr = {}
+ self.__type2name2decls_nr = {}
+ self.__all_decls = None
+
def init_optimizer(self):
+ self.clear_optimizer()
#start_time = time.clock()
***************
*** 95,123 ****
self.ignore = False
map( lambda decl: decl.include(), self.declarations )
! def __create_matcher( self, match_class, *args, **keywds ):
! matcher = match_class( **keywds )
! if len( args ) == 1 and callable( args[0] ):
decl_wrapper.logger.info( 'running query: %s and <user defined function>' % str( matcher ) )
! return lambda decl: matcher( decl ) and args[0](decl)
else:
- if 1 == len( args ) and isinstance( args[0], str ):
- matcher.name = args[0]
decl_wrapper.logger.info( 'running query: %s' % str( matcher ) )
return matcher
-
- def __does_query_has_type( self, **keywds ):
- return keywds.has_key( 'decl_type' )
-
- def __does_query_has_type_and_name( self, *args, **keywds ):
- if len(args) != 1:
- return False
- if not isinstance( args[0], str ):
- return False
- return self.__does_query_has_type_and_name( **keywds )
! def __findout_range( self, matcher, *args, **keywds ):
! recursive = keywds.get( 'recursive', scopedef_t.RECURSIVE_DEFAULT )
!
if not self.__optimized:
decl_wrapper.logger.info( 'running non optimized query - optimization has not been done' )
--- 104,147 ----
self.ignore = False
map( lambda decl: decl.include(), self.declarations )
+
+ def __normalize_args( self, **keywds ):
+ if callable( keywds['name'] ) and None is keywds['function']:
+ keywds['function'] = keywds['name']
+ keywds['name'] = None
+ return keywds
+
+ def __findout_recursive( self, **keywds ):
+ if None is keywds[ 'recursive' ]:
+ return self.RECURSIVE_DEFAULT
+ else:
+ return keywds[ 'recursive' ]
! def __findout_decl_type( self, match_class, **keywds ):
! if keywds.has_key( 'decl_type' ):
! return keywds['decl_type']
!
! matcher_args = keywds.copy()
! del matcher_args['function']
! del matcher_args['recursive']
!
! matcher = match_class( **matcher_args )
! if matcher.decl_type:
! return matcher.decl_type
! return None
!
! def __create_matcher( self, match_class, **keywds ):
! matcher_args = keywds.copy()
! del matcher_args['function']
! del matcher_args['recursive']
!
! matcher = match_class( **matcher_args )
! if keywds['function']:
decl_wrapper.logger.info( 'running query: %s and <user defined function>' % str( matcher ) )
! return lambda decl: matcher( decl ) and keywds['function'](decl)
else:
decl_wrapper.logger.info( 'running query: %s' % str( matcher ) )
return matcher
! def __findout_range( self, name, decl_type, recursive ):
if not self.__optimized:
decl_wrapper.logger.info( 'running non optimized query - optimization has not been done' )
***************
*** 127,147 ****
return decls
! if self.__does_query_has_type_and_name( *args, **keywds ):
! name = matcher.name
if matcher.is_full_name():
! name = matcher.decl_name_only()
if recursive:
decl_wrapper.logger.info( 'running type + name optimized query recursively' )
! return self.__type2name2decls[ keywds['decl_type'] ][ name ]
else:
decl_wrapper.logger.info( 'running type + name optimized query non recursively' )
! return self.__type2name2decls_nr[ keywds['decl_type'] ][ name ]
! elif self.__does_query_has_type( **keywds ):
if recursive:
decl_wrapper.logger.info( 'running type optimized query recursively' )
! return self.__type2decls[ keywds['decl_type'] ]
else:
decl_wrapper.logger.info( 'running type optimized query non recursively' )
! return self.__type2decls_nr[ keywds['decl_type'] ]
else:
decl_wrapper.logger.info( 'running non optimized query - query is more complex then type + name' )
--- 151,171 ----
return decls
! if name and decl_type:
! matcher = declarations.declaration_matcher_t( name=name )
if matcher.is_full_name():
! name = matcher.decl_name_only
if recursive:
decl_wrapper.logger.info( 'running type + name optimized query recursively' )
! return self.__type2name2decls[decl_type][name]
else:
decl_wrapper.logger.info( 'running type + name optimized query non recursively' )
! return self.__type2name2decls_nr[decl_type][name]
! elif decl_type:
if recursive:
decl_wrapper.logger.info( 'running type optimized query recursively' )
! return self.__type2decls[ decl_type ]
else:
decl_wrapper.logger.info( 'running type optimized query non recursively' )
! return self.__type2decls_nr[ decl_type ]
else:
decl_wrapper.logger.info( 'running non optimized query - query is more complex then type + name' )
***************
*** 151,159 ****
return self.declarations
! def _find_single( self, match_class, *args, **keywds ):
decl_wrapper.logger.info( 'running query - started' )
start_time = time.clock()
! matcher = self.__create_matcher( match_class, *args, **keywds )
! decls = self.__findout_range( matcher, *args, **keywds )
found = declarations.matcher.get_single( matcher, decls, False )
decl_wrapper.logger.info( 'query execution took : %f seconds' % ( time.clock() - start_time ) )
--- 175,186 ----
return self.declarations
! def _find_single( self, match_class, **keywds ):
decl_wrapper.logger.info( 'running query - started' )
start_time = time.clock()
! norm_keywds = self.__normalize_args( **keywds )
! matcher = self.__create_matcher( match_class, **norm_keywds )
! dtype = self.__findout_decl_type( match_class, **norm_keywds )
! recursive_ = self.__findout_recursive( **norm_keywds )
! decls = self.__findout_range( norm_keywds['name'], dtype, recursive_ )
found = declarations.matcher.get_single( matcher, decls, False )
decl_wrapper.logger.info( 'query execution took : %f seconds' % ( time.clock() - start_time ) )
***************
*** 161,168 ****
return found
! def _find_multiple( self, match_class, *args, **keywds ):
start_time = time.clock()
! matcher = self.__create_matcher( match_class, *args, **keywds )
! decls = self.__findout_range( matcher, *args, **keywds )
found = declarations.matcher.find( matcher, decls, False )
mfound = mdecl_wrapper.mdecl_wrapper_t( found )
--- 188,198 ----
return found
! def _find_multiple( self, match_class, **keywds ):
start_time = time.clock()
! norm_keywds = self.__normalize_args( **keywds )
! matcher = self.__create_matcher( match_class, **norm_keywds )
! dtype = self.__findout_decl_type( match_class, **norm_keywds )
! recursive_ = self.__findout_recursive( **norm_keywds )
! decls = self.__findout_range( norm_keywds['name'], dtype, recursive_ )
found = declarations.matcher.find( matcher, decls, False )
mfound = mdecl_wrapper.mdecl_wrapper_t( found )
***************
*** 174,252 ****
return mfound
! def decl( self, *args, **keywds ):
! return self._find_single( declarations.declaration_matcher_t, *args, **keywds )
! def decls( self, *args, **keywds ):
! return self._find_multiple( declarations.declaration_matcher_t, *args, **keywds )
! def class_( self, *args, **keywds ):
! keywds['decl_type'] = declarations.class_t
! return self._find_single( declarations.declaration_matcher_t, *args, **keywds )
! def classes( self, *args, **keywds ):
! keywds['decl_type'] = declarations.class_t
! return self._find_multiple( declarations.declaration_matcher_t, *args, **keywds )
! def variable( self, *args, **keywds ):
! keywds['decl_type'] = declarations.variable_t
! return self._find_single( declarations.variable_matcher_t, *args, **keywds )
! def variables( self, *args, **keywds ):
! keywds['decl_type'] = declarations.variable_t
! return self._find_multiple( declarations.variable_matcher_t, *args, **keywds )
! def calldef( self, *args, **keywds ):
! keywds['decl_type'] = declarations.calldef_t
! return self._find_single( declarations.calldef_matcher_t, *args, **keywds )
! def calldefs( self, *args, **keywds ):
! keywds['decl_type'] = declarations.calldef_t
! return self._find_multiple( declarations.calldef_matcher_t, *args, **keywds )
! def operator( self, *args, **keywds ):
! keywds['decl_type'] = declarations.operator_t
! return self._find_single( declarations.operator_matcher_t, *args, **keywds )
!
! def operators( self, *args, **keywds ):
! keywds['decl_type'] = declarations.operator_t
! return self._find_multiple( declarations.operator_matcher_t, *args, **keywds )
!
! def member_function( self, *args, **keywds ):
! keywds['decl_type'] = declarations.member_function_t
! return self._find_single( declarations.calldef_matcher_t, *args, **keywds )
! def member_functions( self, *args, **keywds ):
! keywds['decl_type'] = declarations.member_function_t
! return self._find_multiple( declarations.calldef_matcher_t, *args, **keywds )
! def constructor( self, *args, **keywds ):
! keywds['decl_type'] = declarations.constructor_t
! return self._find_single( declarations.calldef_matcher_t, *args, **keywds )
! def constructors( self, *args, **keywds ):
! keywds['decl_type'] = declarations.constructor_t
! return self._find_multiple( declarations.calldef_matcher_t, *args, **keywds )
! def member_operator( self, *args, **keywds ):
! keywds['decl_type'] = declarations.member_operator_t
! return self._find_single( declarations.operator_matcher_t, *args, **keywds )
! def member_operators( self, *args, **keywds ):
! keywds['decl_type'] = declarations.member_operator_t
! return self._find_multiple( declarations.operator_matcher_t, *args, **keywds )
! def casting_operator( self, *args, **keywds ):
! keywds['decl_type'] = declarations.casting_operator_t
! return self._find_single( declarations.calldef_matcher_t, *args, **keywds )
! def casting_operators( self, *args, **keywds ):
! keywds['decl_type'] = declarations.casting_operator_t
! return self._find_multiple( declarations.calldef_matcher_t, *args, **keywds )
! def enumeration( self, *args, **keywds ):
! keywds['decl_type'] = declarations.enumeration_t
! return self._find_single( declarations.declaration_matcher_t, *args, **keywds )
- def enumerations( self, *args, **keywds ):
- keywds['decl_type'] = declarations.enumeration_t
- return self._find_multiple( declarations.declaration_matcher_t, *args, **keywds )
--- 204,409 ----
return mfound
! def decl( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.declaration_matcher_t
! , name=name
! , function=function
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def decls( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.declaration_matcher_t
! , name=name
! , function=function
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def class_( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.declaration_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.class_t
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def classes( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.declaration_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.class_t
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def variable( self, name=None, function=None, type=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.variable_matcher_t
! , name=name
! , function=function
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def variables( self, name=None, function=None, type=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.variable_matcher_t
! , name=name
! , function=function
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def calldef( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.calldef_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def calldefs( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.calldef_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=decl_type
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=decl_type
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def member_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.member_function_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def member_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.member_function_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
!
! def constructor( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.constructor_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def constructors( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.constructor_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
!
! def member_operator( self, name=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=declarations.member_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def member_operators( self, name=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.operator_matcher_t
! , name=name
! , symbol=symbol
! , function=function
! , decl_type=declarations.member_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
!
! def casting_operator( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.casting_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive )
! def casting_operators( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.calldef_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.casting_operator_t
! , return_type=return_type
! , arg_types=arg_types
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def enumeration( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_single( declarations.declaration_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.enumeration_t
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
! def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ):
! return self._find_multiple( declarations.declaration_matcher_t
! , name=name
! , function=function
! , decl_type=declarations.enumeration_t
! , header_dir=header_dir
! , header_file=header_file
! , recursive=recursive)
|