[pygccxml-commit] SF.net SVN: pygccxml: [1060] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-06-17 10:42:05
|
Revision: 1060 http://svn.sourceforge.net/pygccxml/?rev=1060&view=rev Author: roman_yakovenko Date: 2007-06-17 03:42:04 -0700 (Sun, 17 Jun 2007) Log Message: ----------- adding another set of containers to remove_defaults functionality Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/__init__.py pygccxml_dev/pygccxml/declarations/container_traits.py pygccxml_dev/unittests/data/remove_template_defaults.hpp pygccxml_dev/unittests/remove_template_defaults_tester.py Modified: pygccxml_dev/pygccxml/declarations/__init__.py =================================================================== --- pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-17 08:27:49 UTC (rev 1059) +++ pygccxml_dev/pygccxml/declarations/__init__.py 2007-06-17 10:42:04 UTC (rev 1060) @@ -169,7 +169,7 @@ from container_traits import list_traits from container_traits import deque_traits from container_traits import queue_traits -from container_traits import priority_queue +from container_traits import priority_queue_traits from container_traits import vector_traits from container_traits import stack_traits from container_traits import map_traits @@ -183,31 +183,15 @@ from function_traits import is_same_function -all_container_traits = \ -[ - list_traits - , deque_traits - , queue_traits - , priority_queue - , vector_traits - , stack_traits - , map_traits - , multimap_traits - , hash_map_traits - , hash_multimap_traits - , set_traits - , hash_set_traits - , multiset_traits - , hash_multiset_traits -] -"""list, that contains all STD container traits classes""" +all_container_traits = container_traits.container_traits +"""tuple of all STD container traits classes""" sequential_container_traits = \ [ list_traits , deque_traits , queue_traits - , priority_queue + , priority_queue_traits , vector_traits , stack_traits , set_traits Modified: pygccxml_dev/pygccxml/declarations/container_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-17 08:27:49 UTC (rev 1059) +++ pygccxml_dev/pygccxml/declarations/container_traits.py 2007-06-17 10:42:04 UTC (rev 1060) @@ -15,6 +15,9 @@ import type_traits import class_declaration +def __normalize_type( type_str ): + return type_str.replace( ' ', '' ) + def __remove_basic_string( cls_name ): strings = { 'std::string' : ( 'std::basic_string<char,std::char_traits<char>,std::allocator<char> >' @@ -38,7 +41,7 @@ return cls_name return 'std::' + c_traits.remove_defaults( no_std_cls_name ) -def __remove_allocator( cls_name ): +def __remove_allocator( cls_name, default_allocator='std::allocator' ): cls_name = __remove_basic_string( cls_name ) # "vector<int,std::allocator<int> >" c_name, c_args = templates.split( cls_name ) @@ -46,28 +49,61 @@ if 2 != len( c_args ): return a_name, a_args = templates.split( c_args[1] ) - if 'allocator' not in a_name: + if __normalize_type(default_allocator) != __normalize_type( a_name ): return if 1 != len( a_args ): return - if c_args[0].strip() != a_args[0]: + if __normalize_type( c_args[0] ) != __normalize_type( a_args[0] ): return value_type = __remove_defaults_recursive( c_args[0] ) return templates.join( c_name, [value_type] ) -def __remove_container( cls_name, default_container_name='deque' ): +def __remove_container( cls_name, default_container_name='std::deque' ): cls_name = __remove_basic_string( cls_name ) - # "vector<int,std::allocator<int> >" c_name, c_args = templates.split( cls_name ) - #"vector", [ "int", "std::allocator<int>" ] if 2 != len( c_args ): return dc_no_defaults = __remove_defaults_recursive( c_args[1] ) - if dc_no_defaults != templates.join( 'std::' + default_container_name, [c_args[0]] ): + if __normalize_type( dc_no_defaults ) \ + != __normalize_type( templates.join( default_container_name, [c_args[0]] ) ): return value_type = __remove_defaults_recursive( c_args[0] ) return templates.join( c_name, [value_type] ) + +def __remove_container_compare( cls_name, default_container_name='std::vector', default_compare='std::less' ): + cls_name = __remove_basic_string( cls_name ) + c_name, c_args = templates.split( cls_name ) + if 3 != len( c_args ): + return + dc_no_defaults = __remove_defaults_recursive( c_args[1] ) + if __normalize_type( dc_no_defaults ) \ + != __normalize_type( templates.join( default_container_name, [c_args[0]] ) ): + return + dcomp_no_defaults = __remove_defaults_recursive( c_args[2] ) + if __normalize_type( dcomp_no_defaults ) \ + != __normalize_type( templates.join( default_compare, [c_args[0]] ) ): + return + value_type = __remove_defaults_recursive( c_args[0] ) + return templates.join( c_name, [value_type] ) + +def __remove_compare_allocator( cls_name, default_compare='std::less', default_allocator='std::allocator' ): + cls_name = __remove_basic_string( cls_name ) + c_name, c_args = templates.split( cls_name ) + if 3 != len( c_args ): + return + dc_no_defaults = __remove_defaults_recursive( c_args[1] ) + if __normalize_type( dc_no_defaults ) \ + != __normalize_type( templates.join( default_compare, [c_args[0]] ) ): + return + da_no_defaults = __remove_defaults_recursive( c_args[2] ) + if __normalize_type( da_no_defaults ) \ + != __normalize_type( templates.join( default_allocator, [c_args[0]] ) ): + return + value_type = __remove_defaults_recursive( c_args[0] ) + return templates.join( c_name, [value_type] ) + + class container_traits_impl_t: """this class implements the functionality needed for convinient work with STD container classes. @@ -192,7 +228,7 @@ queue_traits = create_traits_class( 'queue', 0, 'value_type', __remove_container ) -priority_queue = create_traits_class( 'priority_queue', 0, 'value_type' ) +priority_queue_traits = create_traits_class( 'priority_queue', 0, 'value_type', __remove_container_compare ) vector_traits = create_traits_class( 'vector', 0, 'value_type', __remove_allocator ) @@ -204,17 +240,17 @@ hash_map_traits = create_traits_class( 'hash_map', 1, 'mapped_type' ) hash_multimap_traits = create_traits_class( 'hash_multimap', 1, 'mapped_type' ) -set_traits = create_traits_class( 'set', 0, 'value_type' ) +set_traits = create_traits_class( 'set', 0, 'value_type', __remove_compare_allocator ) hash_set_traits = create_traits_class( 'hash_set', 0, 'value_type' ) -multiset_traits = create_traits_class( 'multiset', 0, 'value_type' ) +multiset_traits = create_traits_class( 'multiset', 0, 'value_type', __remove_compare_allocator ) hash_multiset_traits = create_traits_class( 'hash_multiset', 0, 'value_type' ) container_traits = ( list_traits , deque_traits , queue_traits - , priority_queue + , priority_queue_traits , vector_traits , stack_traits , map_traits @@ -225,6 +261,7 @@ , hash_set_traits , multiset_traits , hash_multiset_traits ) +"""tuple of all STD container traits classes""" def find_container_traits( cls_or_string ): if isinstance( cls_or_string, types.StringTypes ): Modified: pygccxml_dev/unittests/data/remove_template_defaults.hpp =================================================================== --- pygccxml_dev/unittests/data/remove_template_defaults.hpp 2007-06-17 08:27:49 UTC (rev 1059) +++ pygccxml_dev/unittests/data/remove_template_defaults.hpp 2007-06-17 10:42:04 UTC (rev 1060) @@ -11,6 +11,7 @@ #include <deque> #include <queue> #include <list> +#include <set> namespace rtd{ @@ -36,6 +37,24 @@ } +namespace priority_queues{ + typedef std::priority_queue< int > pq_int; + typedef std::priority_queue< std::string > pq_string; + } +namespace sets{ + typedef std::set< std::vector< int > > s_v_int; + typedef std::set< std::string > s_string; + +} + +namespace multiset_sets{ + typedef std::multiset< std::vector< int > > ms_v_int; + typedef std::multiset< std::string > ms_string; + +} + +} + #endif//__remove_template_defaults_hpp__ Modified: pygccxml_dev/unittests/remove_template_defaults_tester.py =================================================================== --- pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-17 08:27:49 UTC (rev 1059) +++ pygccxml_dev/unittests/remove_template_defaults_tester.py 2007-06-17 10:42:04 UTC (rev 1060) @@ -58,7 +58,30 @@ self.failUnless( 'queue< std::string >' == declarations.queue_traits.remove_defaults( q_string ) ) + def test_priority_queue( self ): + pq_int = self.global_ns.typedef( 'pq_int' ) + self.failUnless( 'priority_queue< int >' + == declarations.priority_queue_traits.remove_defaults( pq_int ) ) + pq_string = self.global_ns.typedef( 'pq_string' ) + self.failUnless( 'priority_queue< std::string >' + == declarations.priority_queue_traits.remove_defaults( pq_string ) ) + def test_set( self ): + s_v_int = self.global_ns.typedef( 's_v_int' ) + self.failUnless( 'set< std::vector< int > >' + == declarations.set_traits.remove_defaults( s_v_int ) ) + s_string = self.global_ns.typedef( 's_string' ) + self.failUnless( 'set< std::string >' + == declarations.set_traits.remove_defaults( s_string ) ) + + def test_multiset( self ): + ms_v_int = self.global_ns.typedef( 'ms_v_int' ) + self.failUnless( 'multiset< std::vector< int > >' + == declarations.multiset_traits.remove_defaults( ms_v_int ) ) + ms_string = self.global_ns.typedef( 'ms_string' ) + self.failUnless( 'multiset< std::string >' + == declarations.multiset_traits.remove_defaults( ms_string ) ) + 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. |