2020std_namespaces = ('std' , 'stdext' , '__gnu_cxx' )
2121
2222
23+ def _replace_basic_string (cls_name ):
24+ print ("_replace_basic_string start" , cls_name )
25+ # Replace all the variations of strings by the smallest one.
26+ strings = {
27+ "std::string" :
28+ [v for v in
29+ type_traits .normalized_string_equivalences
30+ if not v == "std::string" ].extend ([v .replace ("::std" , "std" ) for v in
31+ type_traits .string_equivalences ]),
32+ "std::wstring" :
33+ [v for v in
34+ type_traits .normalized_wstring_equivalences
35+ if not v == "std::wstring" ]
36+ }
37+
38+ new_name = cls_name
39+ for short_name , long_names in strings .items ():
40+ for lname in long_names :
41+ print ("_replace_basic_string lname" , lname , short_name )
42+ new_name = new_name .replace (lname , short_name )
43+
44+ print ("_replace_basic_string end" , new_name )
45+ # new_name = cls_name.replace(" ", "")
46+ # for short_name, long_names in strings.items():
47+ # for lname in long_names:
48+ # print("_replace_basic_string lname", lname, short_name)
49+ # new_name = new_name.replace(lname, short_name)
50+ # new_name = new_name.replace(",", ", ").replace("<", "< ").replace(">", " >")
51+ # print("_replace_basic_string end", new_name)
52+ return new_name
53+
54+
2355class defaults_eraser (object ):
2456
2557 def __init__ (self , unordered_maps_and_sets ):
@@ -29,24 +61,7 @@ def normalize(self, type_str):
2961 return type_str .replace (' ' , '' )
3062
3163 def replace_basic_string (self , cls_name ):
32- # Replace all the variations of strings by the smallest one.
33- strings = {
34- "std::string" :
35- [v for v in
36- type_traits .normalized_string_equivalences
37- if not v == "std::string" ],
38- "std::wstring" :
39- [v for v in
40- type_traits .normalized_wstring_equivalences
41- if not v == "std::wstring" ]
42- }
43-
44- new_name = cls_name
45- for short_name , long_names in strings .items ():
46- for lname in long_names :
47- new_name = new_name .replace (lname , short_name )
48-
49- return new_name
64+ return _replace_basic_string (cls_name )
5065
5166 def decorated_call_prefix (self , cls_name , text , doit ):
5267 has_text = cls_name .startswith (text )
@@ -96,10 +111,11 @@ def erase_recursive(self, cls_name):
96111 return self .no_end_const (cls_name )
97112
98113 def erase_allocator (self , cls_name , default_allocator = 'std::allocator' ):
99- cls_name = self . replace_basic_string ( cls_name )
114+ print ( "erase_allocator" , cls_name )
100115 c_name , c_args = templates .split (cls_name )
116+ print ("c_name, c_args" , c_name , c_args )
101117 if len (c_args ) != 2 :
102- return
118+ return cls_name
103119 value_type = c_args [0 ]
104120 tmpl = string .Template (
105121 "$container< $value_type, $allocator<$value_type> >" )
@@ -109,19 +125,22 @@ def erase_allocator(self, cls_name, default_allocator='std::allocator'):
109125 allocator = default_allocator )
110126 if self .normalize (cls_name ) == \
111127 self .normalize (tmpl ):
112- return templates .join (
128+ result = templates .join (
113129 c_name , [self .erase_recursive (value_type )])
130+ print ("result" , result )
131+ print ("c_name" , c_name )
132+ print ("value_type" , value_type )
133+ return result
114134
115135 def erase_container (self , cls_name , default_container_name = 'std::deque' ):
116- cls_name = self .replace_basic_string (cls_name )
117136 c_name , c_args = templates .split (cls_name )
118137 if len (c_args ) != 2 :
119- return
138+ return cls_name
120139 value_type = c_args [0 ]
121140 dc_no_defaults = self .erase_recursive (c_args [1 ])
122141 if self .normalize (dc_no_defaults ) != self .normalize (
123142 templates .join (default_container_name , [value_type ])):
124- return
143+ return None
125144 return templates .join (
126145 c_name , [self .erase_recursive (value_type )])
127146
@@ -130,10 +149,9 @@ def erase_container_compare(
130149 cls_name ,
131150 default_container_name = 'std::vector' ,
132151 default_compare = 'std::less' ):
133- cls_name = self .replace_basic_string (cls_name )
134152 c_name , c_args = templates .split (cls_name )
135153 if len (c_args ) != 3 :
136- return
154+ return cls_name
137155 dc_no_defaults = self .erase_recursive (c_args [1 ])
138156 if self .normalize (dc_no_defaults ) != self .normalize (
139157 templates .join (default_container_name , [c_args [0 ]])):
@@ -150,10 +168,9 @@ def erase_compare_allocator(
150168 cls_name ,
151169 default_compare = 'std::less' ,
152170 default_allocator = 'std::allocator' ):
153- cls_name = self .replace_basic_string (cls_name )
154171 c_name , c_args = templates .split (cls_name )
155172 if len (c_args ) != 3 :
156- return
173+ return cls_name
157174 value_type = c_args [0 ]
158175 tmpl = string .Template (
159176 "$container< $value_type, $compare<$value_type>, " +
@@ -173,10 +190,9 @@ def erase_map_compare_allocator(
173190 cls_name ,
174191 default_compare = 'std::less' ,
175192 default_allocator = 'std::allocator' ):
176- cls_name = self .replace_basic_string (cls_name )
177193 c_name , c_args = templates .split (cls_name )
178194 if len (c_args ) != 4 :
179- return
195+ return cls_name
180196 key_type = c_args [0 ]
181197 mapped_type = c_args [1 ]
182198 tmpls = [
@@ -203,10 +219,9 @@ def erase_map_compare_allocator(
203219 self .erase_recursive (mapped_type )])
204220
205221 def erase_hash_allocator (self , cls_name ):
206- cls_name = self .replace_basic_string (cls_name )
207222 c_name , c_args = templates .split (cls_name )
208223 if len (c_args ) < 3 :
209- return
224+ return cls_name
210225
211226 default_less = 'std::less'
212227 default_equal_to = 'std::equal_to'
@@ -223,7 +238,7 @@ def erase_hash_allocator(self, cls_name):
223238 "$container< $value_type, $hash<$value_type >, " +
224239 "$equal_to<$value_type >, $allocator<$value_type> >" )
225240 else :
226- return
241+ return cls_name
227242
228243 value_type = c_args [0 ]
229244 template = string .Template (tmpl )
@@ -241,7 +256,6 @@ def erase_hash_allocator(self, cls_name):
241256 c_name , [self .erase_recursive (value_type )])
242257
243258 def erase_hashmap_compare_allocator (self , cls_name ):
244- cls_name = self .replace_basic_string (cls_name )
245259 c_name , c_args = templates .split (cls_name )
246260
247261 if self .unordered_maps_and_sets :
@@ -255,7 +269,7 @@ def erase_hashmap_compare_allocator(self, cls_name):
255269 key_type = c_args [0 ]
256270 mapped_type = c_args [1 ]
257271 else :
258- return
272+ return cls_name
259273
260274 if len (c_args ) == 4 :
261275 default_hash = 'hash_compare'
@@ -302,7 +316,7 @@ def erase_hashmap_compare_allocator(self, cls_name):
302316 "$equal_to<$key_type>, " +
303317 "$allocator< $mapped_type > >" )
304318 else :
305- return
319+ return cls_name
306320
307321 for ns in std_namespaces :
308322 inst = tmpl .substitute (
@@ -517,15 +531,18 @@ def remove_defaults(self, type_or_string):
517531 std::vector< int >
518532
519533 """
520-
521534 name = type_or_string
522535 if not isinstance (type_or_string , str ):
536+ print (
537+ "xxxx" ,
538+ type (self .class_declaration (type_or_string )),
539+ self .class_declaration (type_or_string ).name
540+ )
523541 name = self .class_declaration (type_or_string ).name
524542 if not self .remove_defaults_impl :
525543 return name
544+ name = _replace_basic_string (name )
526545 no_defaults = self .remove_defaults_impl (name )
527- if not no_defaults :
528- return name
529546 return no_defaults
530547
531548
0 commit comments