Revision: 1349
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1349&view=rev
Author: roman_yakovenko
Date: 2008-06-24 23:39:31 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
small refactoring in "noncopyable" area
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/class_declaration.py
pygccxml_dev/pygccxml/declarations/type_traits.py
Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-24 06:52:49 UTC (rev 1348)
+++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-25 06:39:31 UTC (rev 1349)
@@ -18,6 +18,7 @@
import algorithm
import declaration
import dependencies
+from pygccxml import utils
class ACCESS_TYPES:
"""class that defines "access" constants"""
@@ -498,5 +499,33 @@
return 'wstring'
else:
return get_partial_name( self.name )
+
+ def find_noncopyable_vars( self ):
+ """returns list of all noncopyable variables"""
+ import type_traits as tt#prevent cyclic dependencies
+ logger = utils.loggers.cxx_parser
+ mvars = self.vars( lambda v: not v.type_qualifiers.has_static, recursive=False, allow_empty=True )
+ noncopyable_vars = []
+ for mvar in mvars:
+ type_ = tt.remove_reference( mvar.type )
+ if tt.is_const( type_ ):
+ no_const = remove_const( type_ )
+ if tt.is_fundamental( no_const ) or tt.is_enum( no_const):
+ logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - fundamental or enum" % self.decl_string )
+ noncopyable_vars.append( mvar )
+ if tt.is_class( no_const ):
+ logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - class" % self.decl_string )
+ noncopyable_vars.append( mvar )
+ if tt.is_array( no_const ):
+ logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - array" % self.decl_string )
+ noncopyable_vars.append( mvar )
+ if tt.is_class( type_ ):
+ cls = type_.declaration
+ if tt.is_noncopyable( cls ):
+ logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes member variable - class that is not copyable" % self.decl_string )
+ noncopyable_vars.append( mvar )
+ logger.debug( "__contains_noncopyable_mem_var - %s - false - doesn't contains noncopyable members" % self.decl_string )
+ return noncopyable_vars
+
class_types = ( class_t, class_declaration_t )
Modified: pygccxml_dev/pygccxml/declarations/type_traits.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/type_traits.py 2008-06-24 06:52:49 UTC (rev 1348)
+++ pygccxml_dev/pygccxml/declarations/type_traits.py 2008-06-25 06:39:31 UTC (rev 1349)
@@ -800,31 +800,6 @@
"""returns True, if source could be converted to target, otherwise False"""
return __is_convertible_t( source, target ).is_convertible()
-def __contains_noncopyable_mem_var( class_ ):
- """implementation details"""
- logger = utils.loggers.cxx_parser
- mvars = class_.vars( lambda v: not v.type_qualifiers.has_static, recursive=False, allow_empty=True )
- for mvar in mvars:
- type_ = remove_alias( mvar.type )
- type_ = remove_reference( type_ )
- if is_const( type_ ):
- no_const = remove_const( type_ )
- if is_fundamental( no_const ) or is_enum( no_const):
- logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - fundamental or enum" % class_.decl_string )
- return True
- if is_class( no_const ):
- logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - class" % class_.decl_string )
- return True
- if is_array( no_const ):
- logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - array" % class_.decl_string )
- return True
- if is_class( type_ ):
- cls = type_.declaration
- if is_noncopyable( cls ):
- logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes member variable - class that is not copyable" % class_.decl_string )
- return True
- logger.debug( "__contains_noncopyable_mem_var - %s - false - doesn't contains noncopyable members" % class_.decl_string )
-
def __is_noncopyable_single( class_):
"""implementation details"""
#It is not enough to check base classes, we should also to check
@@ -844,7 +819,7 @@
])
logger.debug( msg )
return False
- if __contains_noncopyable_mem_var( class_ ):
+ if class_.find_noncopyable_vars():
logger.debug( "__is_noncopyable_single(TRUE) - %s - contains noncopyable members" % class_.decl_string )
return True
else:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|