@@ -244,9 +244,95 @@ void _type_get_type_pair(_typeinfo_t* pt_typeinfofirst, _typeinfo_t* pt_typeinfo
244
244
}
245
245
}
246
246
247
+ static inline bool_t _type_cstl_builtin_special (const char * s_typename )
248
+ {
249
+ /*
250
+ * Judging the special cstl-builtin type.
251
+ */
252
+ size_t t_length = 0 ;
253
+ bool_t b_result = false;
254
+
255
+ assert (s_typename != NULL );
256
+
257
+ t_length = strlen (s_typename );
258
+ switch (t_length ) {
259
+ case 7 :
260
+ if (strncmp (s_typename , _RANGE_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
261
+ b_result = true;
262
+ }
263
+ break ;
264
+ case 8 :
265
+ if (strncmp (s_typename , _STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
266
+ b_result = true;
267
+ }
268
+ break ;
269
+ case 10 :
270
+ if (strncmp (s_typename , _ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
271
+ b_result = true;
272
+ }
273
+ break ;
274
+ case 14 :
275
+ if (strncmp (s_typename , _SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
276
+ strncmp (s_typename , _MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
277
+ b_result = true;
278
+ }
279
+ break ;
280
+ case 15 :
281
+ if (strncmp (s_typename , _LIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
282
+ b_result = true;
283
+ }
284
+ break ;
285
+ case 16 :
286
+ if (strncmp (s_typename , _INPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
287
+ strncmp (s_typename , _SLIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
288
+ strncmp (s_typename , _DEQUE_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
289
+ b_result = true;
290
+ }
291
+ break ;
292
+ case 17 :
293
+ if (strncmp (s_typename , _STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
294
+ strncmp (s_typename , _OUTPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
295
+ strncmp (s_typename , _VECTOR_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
296
+ b_result = true;
297
+ }
298
+ break ;
299
+ case 18 :
300
+ if (strncmp (s_typename , _FORWARD_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
301
+ b_result = true;
302
+ }
303
+ break ;
304
+ case 19 :
305
+ if (strncmp (s_typename , _MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
306
+ strncmp (s_typename , _MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
307
+ strncmp (s_typename , _HASH_SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
308
+ strncmp (s_typename , _HASH_MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
309
+ b_result = true;
310
+ }
311
+ break ;
312
+ case 23 :
313
+ if (strncmp (s_typename , _BASIC_STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
314
+ b_result = true;
315
+ }
316
+ break ;
317
+ case 24 :
318
+ if (strncmp (s_typename , _HASH_MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
319
+ strncmp (s_typename , _HASH_MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
320
+ strncmp (s_typename , _BIDIRECTIONAL_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
321
+ strncmp (s_typename , _RANDOM_ACCESS_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
322
+ b_result = true;
323
+ }
324
+ break ;
325
+ default :
326
+ b_result = false;
327
+ break ;
328
+ }
329
+
330
+ return b_result ;
331
+ }
332
+
247
333
void _type_get_type (_typeinfo_t * pt_typeinfo , const char * s_typename )
248
334
{
249
- char s_registeredname [_TYPE_NAME_SIZE + 1 ] = { '\0' } ;
335
+ char s_registeredname [_TYPE_NAME_SIZE + 1 ];
250
336
251
337
assert (pt_typeinfo != NULL );
252
338
assert (s_typename != NULL );
@@ -255,6 +341,7 @@ void _type_get_type(_typeinfo_t* pt_typeinfo, const char* s_typename)
255
341
_type_init ();
256
342
}
257
343
344
+ s_registeredname [0 ] = s_registeredname [_TYPE_NAME_SIZE ] = '\0' ;
258
345
pt_typeinfo -> _t_style = _type_get_style (s_typename , pt_typeinfo -> _s_typename );
259
346
if (pt_typeinfo -> _t_style == _TYPE_INVALID ) {
260
347
pt_typeinfo -> _pt_type = NULL ;
@@ -264,33 +351,16 @@ void _type_get_type(_typeinfo_t* pt_typeinfo, const char* s_typename)
264
351
strncpy (s_registeredname , pt_typeinfo -> _s_typename , _TYPE_NAME_SIZE );
265
352
} else {
266
353
/* the string_t , range_t and iterator types are special codition */
267
- if (strncmp (pt_typeinfo -> _s_typename , _STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ||
268
- strncmp (pt_typeinfo -> _s_typename , _RANGE_TYPE , _TYPE_NAME_SIZE ) == 0 ||
269
- strncmp (pt_typeinfo -> _s_typename , _ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
270
- strncmp (pt_typeinfo -> _s_typename , _INPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
271
- strncmp (pt_typeinfo -> _s_typename , _OUTPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
272
- strncmp (pt_typeinfo -> _s_typename , _FORWARD_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
273
- strncmp (pt_typeinfo -> _s_typename , _BIDIRECTIONAL_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
274
- strncmp (pt_typeinfo -> _s_typename , _RANDOM_ACCESS_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
275
- strncmp (pt_typeinfo -> _s_typename , _VECTOR_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
276
- strncmp (pt_typeinfo -> _s_typename , _LIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
277
- strncmp (pt_typeinfo -> _s_typename , _SLIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
278
- strncmp (pt_typeinfo -> _s_typename , _DEQUE_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
279
- strncmp (pt_typeinfo -> _s_typename , _SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
280
- strncmp (pt_typeinfo -> _s_typename , _MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
281
- strncmp (pt_typeinfo -> _s_typename , _MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
282
- strncmp (pt_typeinfo -> _s_typename , _MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
283
- strncmp (pt_typeinfo -> _s_typename , _HASH_SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
284
- strncmp (pt_typeinfo -> _s_typename , _HASH_MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
285
- strncmp (pt_typeinfo -> _s_typename , _HASH_MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
286
- strncmp (pt_typeinfo -> _s_typename , _HASH_MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
287
- strncmp (pt_typeinfo -> _s_typename , _STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
288
- strncmp (pt_typeinfo -> _s_typename , _BASIC_STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
354
+ if (_type_cstl_builtin_special (pt_typeinfo -> _s_typename )) {
289
355
strncpy (s_registeredname , pt_typeinfo -> _s_typename , _TYPE_NAME_SIZE );
290
356
} else {
357
+ size_t t_length = 0 ;
291
358
char * pc_leftbracket = strchr (pt_typeinfo -> _s_typename , _CSTL_LEFT_BRACKET );
292
359
assert (pc_leftbracket != NULL );
293
- strncpy (s_registeredname , pt_typeinfo -> _s_typename , pc_leftbracket - pt_typeinfo -> _s_typename );
360
+ t_length = pc_leftbracket - pt_typeinfo -> _s_typename ;
361
+ assert (t_length <= _TYPE_NAME_SIZE );
362
+ strncpy (s_registeredname , pt_typeinfo -> _s_typename , t_length );
363
+ s_registeredname [t_length ] = '\0' ;
294
364
}
295
365
}
296
366
@@ -445,28 +515,7 @@ void _type_get_elem_typename(const char* s_typename, char* s_elemtypename)
445
515
memset (s_elemtypename , '\0' , _TYPE_NAME_SIZE + 1 );
446
516
447
517
/* the string_t and iterator types are special condition */
448
- if (strncmp (s_typename , _STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ||
449
- strncmp (s_typename , _RANGE_TYPE , _TYPE_NAME_SIZE ) == 0 ||
450
- strncmp (s_typename , _ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
451
- strncmp (s_typename , _INPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
452
- strncmp (s_typename , _OUTPUT_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
453
- strncmp (s_typename , _FORWARD_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
454
- strncmp (s_typename , _BIDIRECTIONAL_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
455
- strncmp (s_typename , _RANDOM_ACCESS_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
456
- strncmp (s_typename , _VECTOR_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
457
- strncmp (s_typename , _LIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
458
- strncmp (s_typename , _SLIST_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
459
- strncmp (s_typename , _DEQUE_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
460
- strncmp (s_typename , _SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
461
- strncmp (s_typename , _MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
462
- strncmp (s_typename , _MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
463
- strncmp (s_typename , _MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
464
- strncmp (s_typename , _HASH_SET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
465
- strncmp (s_typename , _HASH_MAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
466
- strncmp (s_typename , _HASH_MULTISET_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
467
- strncmp (s_typename , _HASH_MULTIMAP_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
468
- strncmp (s_typename , _STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ||
469
- strncmp (s_typename , _BASIC_STRING_ITERATOR_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
518
+ if (_type_cstl_builtin_special (s_typename )) {
470
519
strncpy (s_elemtypename , s_typename , _TYPE_NAME_SIZE );
471
520
} else {
472
521
/* e.g. "vector_t<map_t<int,long>>" */
0 commit comments