diff options
Diffstat (limited to 'src/string.cpp')
-rw-r--r-- | src/string.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/string.cpp b/src/string.cpp new file mode 100644 index 0000000..538ac52 --- /dev/null +++ b/src/string.cpp | |||
@@ -0,0 +1,128 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2011 Xagasoft, All rights reserved. | ||
3 | * | ||
4 | * This file is part of the libbu++ library and is released under the | ||
5 | * terms of the license contained in the file LICENSE. | ||
6 | */ | ||
7 | |||
8 | #define BU_TRACE | ||
9 | #include "bu/trace.h" | ||
10 | |||
11 | #include "bu/string.h" | ||
12 | #include "bu/hash.h" | ||
13 | |||
14 | template class Bu::BasicString<char>; | ||
15 | |||
16 | template<> uint32_t Bu::__calcHashCode<Bu::String>( const Bu::String &k ) | ||
17 | { | ||
18 | long j, sz = k.getSize(); | ||
19 | const char *s = k.getStr(); | ||
20 | |||
21 | long nPos = 0; | ||
22 | for( j = 0; j < sz; j++, s++ ) | ||
23 | { | ||
24 | nPos = *s + (nPos << 6) + (nPos << 16) - nPos; | ||
25 | } | ||
26 | |||
27 | return nPos; | ||
28 | } | ||
29 | |||
30 | template<> bool Bu::__cmpHashKeys<Bu::String>( | ||
31 | const Bu::String &a, const Bu::String &b ) | ||
32 | { | ||
33 | return a == b; | ||
34 | } | ||
35 | |||
36 | template<> void Bu::__tracer_format<Bu::String>( const Bu::String &v ) | ||
37 | { | ||
38 | printf("(%ld)\"%s\"", v.getSize(), v.getStr() ); | ||
39 | } | ||
40 | |||
41 | bool &Bu::operator<<( bool &dst, const Bu::String &sIn ) | ||
42 | { | ||
43 | if( sIn == "true" || sIn == "yes" || sIn == "t" ) | ||
44 | dst = true; | ||
45 | else | ||
46 | dst = false; | ||
47 | |||
48 | return dst; | ||
49 | } | ||
50 | |||
51 | uint8_t &Bu::operator<<( uint8_t &dst, const Bu::String &sIn ) | ||
52 | { | ||
53 | sscanf( sIn.getStr(), "%hhu", &dst ); | ||
54 | return dst; | ||
55 | } | ||
56 | |||
57 | int8_t &Bu::operator<<( int8_t &dst, const Bu::String &sIn ) | ||
58 | { | ||
59 | sscanf( sIn.getStr(), "%hhd", &dst ); | ||
60 | return dst; | ||
61 | } | ||
62 | |||
63 | char &Bu::operator<<( char &dst, const Bu::String &sIn ) | ||
64 | { | ||
65 | sscanf( sIn.getStr(), "%hhd", &dst ); | ||
66 | return dst; | ||
67 | } | ||
68 | |||
69 | uint16_t &Bu::operator<<( uint16_t &dst, const Bu::String &sIn ) | ||
70 | { | ||
71 | sscanf( sIn.getStr(), "%hu", &dst ); | ||
72 | return dst; | ||
73 | } | ||
74 | |||
75 | int16_t &Bu::operator<<( int16_t &dst, const Bu::String &sIn ) | ||
76 | { | ||
77 | sscanf( sIn.getStr(), "%hd", &dst ); | ||
78 | return dst; | ||
79 | } | ||
80 | |||
81 | uint32_t &Bu::operator<<( uint32_t &dst, const Bu::String &sIn ) | ||
82 | { | ||
83 | sscanf( sIn.getStr(), "%u", &dst ); | ||
84 | return dst; | ||
85 | } | ||
86 | |||
87 | int32_t &Bu::operator<<( int32_t &dst, const Bu::String &sIn ) | ||
88 | { | ||
89 | sscanf( sIn.getStr(), "%d", &dst ); | ||
90 | return dst; | ||
91 | } | ||
92 | |||
93 | uint64_t &Bu::operator<<( uint64_t &dst, const Bu::String &sIn ) | ||
94 | { | ||
95 | sscanf( sIn.getStr(), "%llu", &dst ); | ||
96 | return dst; | ||
97 | } | ||
98 | |||
99 | int64_t &Bu::operator<<( int64_t &dst, const Bu::String &sIn ) | ||
100 | { | ||
101 | sscanf( sIn.getStr(), "%lld", &dst ); | ||
102 | return dst; | ||
103 | } | ||
104 | |||
105 | float &Bu::operator<<( float &dst, const Bu::String &sIn ) | ||
106 | { | ||
107 | sscanf( sIn.getStr(), "%f", &dst ); | ||
108 | return dst; | ||
109 | } | ||
110 | |||
111 | double &Bu::operator<<( double &dst, const Bu::String &sIn ) | ||
112 | { | ||
113 | sscanf( sIn.getStr(), "%lf", &dst ); | ||
114 | return dst; | ||
115 | } | ||
116 | |||
117 | long double &Bu::operator<<( long double &dst, const Bu::String &sIn ) | ||
118 | { | ||
119 | sscanf( sIn.getStr(), "%Lf", &dst ); | ||
120 | return dst; | ||
121 | } | ||
122 | |||
123 | Bu::String &Bu::operator<<( Bu::String &dst, const Bu::String &sIn ) | ||
124 | { | ||
125 | dst = sIn; | ||
126 | return dst; | ||
127 | } | ||
128 | |||