[pygccxml-commit] SF.net SVN: pygccxml: [1064] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2007-06-19 09:35:52
|
Revision: 1064
http://svn.sourceforge.net/pygccxml/?rev=1064&view=rev
Author: roman_yakovenko
Date: 2007-06-19 02:35:45 -0700 (Tue, 19 Jun 2007)
Log Message:
-----------
moving functionality "container_traits" from Py++ to pygccxml
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/__init__.py
pygccxml_dev/pygccxml/declarations/class_declaration.py
pygccxml_dev/pygccxml/declarations/container_traits.py
pygccxml_dev/unittests/remove_template_defaults_tester.py
pygccxml_dev/unittests/test_all.py
Added Paths:
-----------
pygccxml_dev/unittests/find_container_traits_tester.py
Modified: pygccxml_dev/pygccxml/declarations/__init__.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-18 14:27:30 UTC (rev 1063)
+++ pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -181,6 +181,7 @@
from container_traits import hash_set_traits
from container_traits import multiset_traits
from container_traits import hash_multiset_traits
+from container_traits import find_container_traits
from function_traits import is_same_function
Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-06-18 14:27:30 UTC (rev 1063)
+++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -81,6 +81,8 @@
"""creates class that describes C++ class declaration( and not definition )"""
declaration.declaration_t.__init__( self, name )
self._aliases = []
+ self._container_traits = None
+ self._container_traits_set = False
def _get__cmp__items(self):
"""implementation details"""
@@ -96,6 +98,15 @@
aliases = property( _get_aliases, _set_aliases
, doc="List of L{aliases<typedef_t>} to this instance")
+ @property
+ def container_traits( self ):
+ """reference to L{container traits<container_traits.py>} or None"""
+ if self._container_traits_set == False:
+ import container_traits #prevent cyclic dependencies
+ self._container_traits_set = True
+ self._container_traits = container_traits.find_container_traits( self )
+ return self._container_traits
+
class class_t( scopedef.scopedef_t ):
"""describes class definition"""
@@ -113,6 +124,8 @@
self._private_members = []
self._protected_members = []
self._aliases = []
+ self._container_traits = None
+ self._container_traits_set = False
def _get_name_impl( self ):
if not self._name: #class with empty name
@@ -365,4 +378,13 @@
return answer
+ @property
+ def container_traits( self ):
+ """reference to L{container traits<container_traits.py>} or None"""
+ if self._container_traits_set == False:
+ import container_traits #prevent cyclic dependencies
+ self._container_traits_set = True
+ self._container_traits = container_traits.find_container_traits( self )
+ return self._container_traits
+
class_types = ( class_t, class_declaration_t )
Modified: pygccxml_dev/pygccxml/declarations/container_traits.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-18 14:27:30 UTC (rev 1063)
+++ pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -373,7 +373,7 @@
return cls_traits
else:
for cls_traits in container_traits:
- if cls_traits.is_my_case( cls ):
+ if cls_traits.is_my_case( cls_or_string ):
return cls_traits
Added: pygccxml_dev/unittests/find_container_traits_tester.py
===================================================================
--- pygccxml_dev/unittests/find_container_traits_tester.py (rev 0)
+++ pygccxml_dev/unittests/find_container_traits_tester.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -0,0 +1,57 @@
+# Copyright 2004 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 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 ):
+ global_ns = None
+ def __init__(self, *args ):
+ parser_test_case.parser_test_case_t.__init__( self, *args )
+ self.header = 'remove_template_defaults.hpp'
+
+ def setUp(self):
+ if not tester_t.global_ns:
+ decls = parser.parse( [self.header], self.config )
+ tester_t.global_ns = declarations.get_global_namespace( decls )
+ tester_t.global_ns.init_optimizer()
+
+ def __cmp_traits( self, typedef, expected ):
+ if isinstance( typedef, str ):
+ typedef = self.global_ns.typedef( typedef )
+ self.failUnless( declarations.find_container_traits( typedef ) is expected )
+ cls = declarations.remove_declarated( typedef )
+ self.failUnless( cls.container_traits is expected )
+
+ def test_find_traits( self ):
+ self.__cmp_traits( 'v_int', declarations.vector_traits )
+ self.__cmp_traits( 'l_int', declarations.list_traits )
+ self.__cmp_traits( 'd_v_int', declarations.deque_traits )
+ self.__cmp_traits( 'q_int', declarations.queue_traits )
+ self.__cmp_traits( 'pq_int', declarations.priority_queue_traits)
+ self.__cmp_traits( 's_v_int', declarations.set_traits)
+ self.__cmp_traits( 'ms_v_int', declarations.multiset_traits)
+ self.__cmp_traits( 'm_i2d', declarations.map_traits )
+ self.__cmp_traits( 'mm_i2d', declarations.multimap_traits )
+ self.__cmp_traits( 'hs_v_int', declarations.hash_set_traits )
+ self.__cmp_traits( 'mhs_v_int', declarations.hash_multiset_traits )
+ self.__cmp_traits( 'hm_i2d', declarations.hash_map_traits )
+ self.__cmp_traits( 'hmm_i2d', declarations.hash_multimap_traits )
+
+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/remove_template_defaults_tester.py
===================================================================
--- pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-18 14:27:30 UTC (rev 1063)
+++ pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -22,7 +22,7 @@
decls = parser.parse( [self.header], self.config )
tester_t.global_ns = declarations.get_global_namespace( decls )
tester_t.global_ns.init_optimizer()
-
+
def test_vector( self ):
v_int = self.global_ns.typedef( 'v_int' )
self.failUnless( 'vector< int >'
Modified: pygccxml_dev/unittests/test_all.py
===================================================================
--- pygccxml_dev/unittests/test_all.py 2007-06-18 14:27:30 UTC (rev 1063)
+++ pygccxml_dev/unittests/test_all.py 2007-06-19 09:35:45 UTC (rev 1064)
@@ -42,6 +42,7 @@
import dependencies_tester
import free_operators_tester
import remove_template_defaults_tester
+import find_container_traits_tester
def create_suite():
testers = [
@@ -83,6 +84,7 @@
, dependencies_tester
, free_operators_tester
, remove_template_defaults_tester
+ , find_container_traits_tester
]
main_suite = unittest.TestSuite()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|