gatelib  2.1
g_car_base.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #ifndef size_t
5  typedef unsigned int size_t;
6 #endif
7 
8 namespace g
9 {
10 namespace car
11 {
12 
19 template < class T > bool is_between ( T aChar , T aStart , T aStop );
21 
23 template < class T > bool is_char_a_digit ( T aChar ) { return is_between <T> ( aChar , '0' , '9' ); }
24 
26 template < class T > bool is_char_ucase ( T aChar ) { return is_between <T> ( aChar , 'A' , 'Z' ); }
27 
29 template < class T > bool is_char_lcase ( T aChar ) { return is_between <T> ( aChar , 'a' , 'z' ); }
30 
32 template < class T > bool is_char_a_letter ( T aChar ) { return is_char_lcase ( aChar ) || is_char_ucase ( aChar ); };
33 
35 template < class T > T u_case ( T aChar ) { return ( is_char_lcase ( aChar ) )? ( aChar - 'a' + 'A' ) : aChar; }
36 
38 template < class T > T l_case ( T aChar ) { return ( is_char_ucase ( aChar ) )? ( aChar - 'A' + 'a' ) : aChar; }
39 
40 //template < class T > bool str_equal ( T , T , bool case_sens = true );
41 
42 template <> inline bool is_between ( char aChar , char aStart , char aStop )
43 {
44  return ( aChar >= aStart && aChar <= aStop );
45 }
46 
47 template <> inline bool is_between ( wchar_t aChar , wchar_t aStart , wchar_t aStop )
48 {
49  return is_between <char>(
50  (char)(0xff & aChar) , (char)(0xff & aStart) , (char)(0xff & aStop) );
51 }
52 
53 template < class T > bool chr_equal ( T aC1 , T aC2 , bool aIsCaseSensitive )
54 {
55  return ( aIsCaseSensitive ) ?
56  ( aC1 == aC2 ) : ( u_case ( aC1 ) == u_case ( aC2 ) );
57 }
58 
59 template < class T> GUint64_t get_chr_ordinal_code ( T aChar )
60 {
61  if ( is_char_a_digit ( aChar ) )
62  {
63  return (GUint64_t)( aChar - (T)'0' );
64  }
65  else if ( is_char_lcase ( aChar ) )
66  {
67  return (GUint64_t)( aChar - (T)'a' ) | (GUint64_t)0xf0;
68  }
69  else if ( is_char_ucase ( aChar ) )
70  {
71  return (GUint64_t)( aChar - (T)'A' ) | (GUint64_t)0xf00;
72  }
73  else
74  {
75  return (GUint64_t)( aChar ) | (GUint64_t)0xf000;
76  }
77 }
78 
88 template < class T > int chr_compare ( T aC1 , T aC2 , bool aIsCaseSensitive )
89 {
90  if ( !aIsCaseSensitive )
91  {
92  aC1 = l_case ( aC1 );
93  aC2 = l_case ( aC2 );
94  }
95 
96  GUint64_t ordinal_code_1 = get_chr_ordinal_code ( aC1 );
97  GUint64_t ordinal_code_2 = get_chr_ordinal_code ( aC2 );
98 
99  if ( ordinal_code_1 < ordinal_code_2 )
100  {
101  return -1;
102  }
103  if ( ordinal_code_1 > ordinal_code_2 )
104  {
105  return +1;
106  }
107  else
108  {
109  return 0;
110  }
111 }
112 
115 }// namespace car
116 }// namespace g
bool is_char_lcase(T aChar)
returns true if char is a lower case letter.
Definition: g_car_base.h:29
Definition: g.mthread.ThreadSimpleEvent.h:5
T l_case(T aChar)
returns the corresponding lower case char.
Definition: g_car_base.h:38
bool is_char_a_letter(T aChar)
returns true if char is a letter.
Definition: g_car_base.h:32
bool is_between(T aChar, T aStart, T aStop)
returns aStart >= aChar >= aStop.
T u_case(T aChar)
returns the corresponding upper case char.
Definition: g_car_base.h:35
int chr_compare(T aC1, T aC2, bool aIsCaseSensitive)
Compares two chars.
Definition: g_car_base.h:88
bool is_char_a_digit(T aChar)
returns true if char is a digit.
Definition: g_car_base.h:23
bool is_char_ucase(T aChar)
returns true if char is a upper case letter.
Definition: g_car_base.h:26