[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.
|