diff options
author | Mike Buland <mbuland@penny-arcade.com> | 2023-04-24 09:16:32 -0700 |
---|---|---|
committer | Mike Buland <mbuland@penny-arcade.com> | 2023-04-24 09:16:32 -0700 |
commit | e1115a28535663cfe404791ede5bb7ca70399053 (patch) | |
tree | b9d273abd126e410fb59d39d9c99072149a14c5c /src/unstable/utfstring.cpp | |
parent | 44409ec7257cb20ff091079eb55dc7a8d4049cf9 (diff) | |
download | libbu++-e1115a28535663cfe404791ede5bb7ca70399053.tar.gz libbu++-e1115a28535663cfe404791ede5bb7ca70399053.tar.bz2 libbu++-e1115a28535663cfe404791ede5bb7ca70399053.tar.xz libbu++-e1115a28535663cfe404791ede5bb7ca70399053.zip |
Additions to blob/utfstring for json.
Diffstat (limited to '')
-rw-r--r-- | src/unstable/utfstring.cpp | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/src/unstable/utfstring.cpp b/src/unstable/utfstring.cpp index 21b3f82..6217f80 100644 --- a/src/unstable/utfstring.cpp +++ b/src/unstable/utfstring.cpp | |||
@@ -8,6 +8,7 @@ | |||
8 | #include "bu/utfstring.h" | 8 | #include "bu/utfstring.h" |
9 | 9 | ||
10 | #include "bu/string.h" | 10 | #include "bu/string.h" |
11 | #include "bu/blob.h" | ||
11 | #include "bu/stream.h" | 12 | #include "bu/stream.h" |
12 | #include "bu/config.h" | 13 | #include "bu/config.h" |
13 | #include "bu/sio.h" | 14 | #include "bu/sio.h" |
@@ -36,11 +37,16 @@ Bu::UtfString::UtfString( const Bu::String &sInput, Encoding eEnc ) | |||
36 | set( sInput, eEnc ); | 37 | set( sInput, eEnc ); |
37 | } | 38 | } |
38 | 39 | ||
39 | Bu::UtfString::UtfString( const char *sInput, Encoding eEnc ) | 40 | Bu::UtfString::UtfString( const Bu::Blob &sInput, Encoding eEnc ) |
40 | { | 41 | { |
41 | set( sInput, eEnc ); | 42 | set( sInput, eEnc ); |
42 | } | 43 | } |
43 | 44 | ||
45 | Bu::UtfString::UtfString( const char *sInput, Encoding eEnc ) | ||
46 | { | ||
47 | set( Bu::Blob(sInput), eEnc ); | ||
48 | } | ||
49 | |||
44 | Bu::UtfString::~UtfString() | 50 | Bu::UtfString::~UtfString() |
45 | { | 51 | { |
46 | } | 52 | } |
@@ -57,6 +63,11 @@ Bu::UtfString::const_iterator Bu::UtfString::begin() const | |||
57 | 63 | ||
58 | void Bu::UtfString::set( const Bu::String &sInput, Encoding eEnc ) | 64 | void Bu::UtfString::set( const Bu::String &sInput, Encoding eEnc ) |
59 | { | 65 | { |
66 | set( sInput, eEnc ); | ||
67 | } | ||
68 | |||
69 | void Bu::UtfString::set( const Bu::Blob &sInput, Encoding eEnc ) | ||
70 | { | ||
60 | switch( eEnc ) | 71 | switch( eEnc ) |
61 | { | 72 | { |
62 | case Utf8: | 73 | case Utf8: |
@@ -122,9 +133,9 @@ void Bu::UtfString::append( const UtfString &rSrc ) | |||
122 | iCharLen += rSrc.iCharLen; | 133 | iCharLen += rSrc.iCharLen; |
123 | } | 134 | } |
124 | 135 | ||
125 | void Bu::UtfString::setUtf8( const Bu::String &sInput ) | 136 | void Bu::UtfString::setUtf8( const Bu::Blob &sInput ) |
126 | { | 137 | { |
127 | for( Bu::String::const_iterator i = sInput.begin(); i; i++ ) | 138 | for( Bu::Blob::const_iterator i = sInput.begin(); i; i++ ) |
128 | { | 139 | { |
129 | if( ((int)(uint8_t)*i)&0x80 ) | 140 | if( ((int)(uint8_t)*i)&0x80 ) |
130 | { | 141 | { |
@@ -145,9 +156,9 @@ void Bu::UtfString::setUtf8( const Bu::String &sInput ) | |||
145 | } | 156 | } |
146 | } | 157 | } |
147 | 158 | ||
148 | void Bu::UtfString::setUtf16( const Bu::String &sInput ) | 159 | void Bu::UtfString::setUtf16( const Bu::Blob &sInput ) |
149 | { | 160 | { |
150 | // Bu::String::const_iterator i = sInput.begin(); | 161 | // Bu::Blob::const_iterator i = sInput.begin(); |
151 | if( (uint8_t)*sInput.begin() == 0xFF && | 162 | if( (uint8_t)*sInput.begin() == 0xFF && |
152 | (uint8_t)*(sInput.begin()+1) == 0xFE ) | 163 | (uint8_t)*(sInput.begin()+1) == 0xFE ) |
153 | { | 164 | { |
@@ -157,9 +168,9 @@ void Bu::UtfString::setUtf16( const Bu::String &sInput ) | |||
157 | setUtf16be( sInput ); | 168 | setUtf16be( sInput ); |
158 | } | 169 | } |
159 | 170 | ||
160 | void Bu::UtfString::setUtf16be( const Bu::String &sInput ) | 171 | void Bu::UtfString::setUtf16be( const Bu::Blob &sInput ) |
161 | { | 172 | { |
162 | Bu::String::const_iterator i = sInput.begin(); | 173 | Bu::Blob::const_iterator i = sInput.begin(); |
163 | if( (uint8_t)*sInput.begin() == 0xFE && | 174 | if( (uint8_t)*sInput.begin() == 0xFE && |
164 | (uint8_t)*(sInput.begin()+1) == 0xFF ) | 175 | (uint8_t)*(sInput.begin()+1) == 0xFF ) |
165 | 176 | ||
@@ -184,9 +195,9 @@ void Bu::UtfString::setUtf16be( const Bu::String &sInput ) | |||
184 | } | 195 | } |
185 | } | 196 | } |
186 | 197 | ||
187 | void Bu::UtfString::setUtf16le( const Bu::String &sInput ) | 198 | void Bu::UtfString::setUtf16le( const Bu::Blob &sInput ) |
188 | { | 199 | { |
189 | Bu::String::const_iterator i = sInput.begin(); | 200 | Bu::Blob::const_iterator i = sInput.begin(); |
190 | if( (uint8_t)*sInput.begin() == 0xFF && | 201 | if( (uint8_t)*sInput.begin() == 0xFF && |
191 | (uint8_t)*(sInput.begin()+1) == 0xFE ) | 202 | (uint8_t)*(sInput.begin()+1) == 0xFE ) |
192 | { | 203 | { |
@@ -210,9 +221,9 @@ void Bu::UtfString::setUtf16le( const Bu::String &sInput ) | |||
210 | } | 221 | } |
211 | } | 222 | } |
212 | 223 | ||
213 | void Bu::UtfString::setUtf32( const Bu::String &sInput ) | 224 | void Bu::UtfString::setUtf32( const Bu::Blob &sInput ) |
214 | { | 225 | { |
215 | Bu::String::const_iterator i = sInput.begin(); | 226 | Bu::Blob::const_iterator i = sInput.begin(); |
216 | if( (uint8_t)*i == 0x00 && | 227 | if( (uint8_t)*i == 0x00 && |
217 | (uint8_t)*(++i) == 0x00 && | 228 | (uint8_t)*(++i) == 0x00 && |
218 | (uint8_t)*(++i) == 0xFF && | 229 | (uint8_t)*(++i) == 0xFF && |
@@ -224,9 +235,9 @@ void Bu::UtfString::setUtf32( const Bu::String &sInput ) | |||
224 | setUtf32be( sInput ); | 235 | setUtf32be( sInput ); |
225 | } | 236 | } |
226 | 237 | ||
227 | void Bu::UtfString::setUtf32be( const Bu::String &sInput ) | 238 | void Bu::UtfString::setUtf32be( const Bu::Blob &sInput ) |
228 | { | 239 | { |
229 | Bu::String::const_iterator i = sInput.begin(); | 240 | Bu::Blob::const_iterator i = sInput.begin(); |
230 | if( (uint8_t)*i == 0x00 && | 241 | if( (uint8_t)*i == 0x00 && |
231 | (uint8_t)*(++i) == 0x00 && | 242 | (uint8_t)*(++i) == 0x00 && |
232 | (uint8_t)*(++i) == 0xFE && | 243 | (uint8_t)*(++i) == 0xFE && |
@@ -250,9 +261,9 @@ void Bu::UtfString::setUtf32be( const Bu::String &sInput ) | |||
250 | } | 261 | } |
251 | } | 262 | } |
252 | 263 | ||
253 | void Bu::UtfString::setUtf32le( const Bu::String &sInput ) | 264 | void Bu::UtfString::setUtf32le( const Bu::Blob &sInput ) |
254 | { | 265 | { |
255 | Bu::String::const_iterator i = sInput.begin(); | 266 | Bu::Blob::const_iterator i = sInput.begin(); |
256 | if( (uint8_t)*i == 0x00 && | 267 | if( (uint8_t)*i == 0x00 && |
257 | (uint8_t)*(++i) == 0x00 && | 268 | (uint8_t)*(++i) == 0x00 && |
258 | (uint8_t)*(++i) == 0xFF && | 269 | (uint8_t)*(++i) == 0xFF && |
@@ -443,12 +454,12 @@ int Bu::UtfString::writePoint( Bu::Stream &sOut, const Bu::UtfChar &c, | |||
443 | 454 | ||
444 | int32_t Bu::UtfString::toInt32( int iRadix ) const | 455 | int32_t Bu::UtfString::toInt32( int iRadix ) const |
445 | { | 456 | { |
446 | return strtol( get().getStr(), NULL, iRadix ); | 457 | return strtol( get().getData(), NULL, iRadix ); |
447 | } | 458 | } |
448 | 459 | ||
449 | int64_t Bu::UtfString::toInt64( int iRadix ) const | 460 | int64_t Bu::UtfString::toInt64( int iRadix ) const |
450 | { | 461 | { |
451 | return strtoll( get().getStr(), NULL, iRadix ); | 462 | return strtoll( get().getData(), NULL, iRadix ); |
452 | } | 463 | } |
453 | 464 | ||
454 | void Bu::UtfString::writeUtf8( Bu::Stream &sOut ) const | 465 | void Bu::UtfString::writeUtf8( Bu::Stream &sOut ) const |
@@ -626,7 +637,7 @@ bool Bu::UtfString::operator==( const Bu::UtfString &rhs ) const | |||
626 | return aData == rhs.aData; | 637 | return aData == rhs.aData; |
627 | } | 638 | } |
628 | 639 | ||
629 | bool Bu::UtfString::operator==( const Bu::String &rhs ) const | 640 | bool Bu::UtfString::operator==( const Bu::Blob &rhs ) const |
630 | { | 641 | { |
631 | // Nieve comparison | 642 | // Nieve comparison |
632 | if( aData.getSize() != rhs.getSize() ) | 643 | if( aData.getSize() != rhs.getSize() ) |
@@ -718,11 +729,11 @@ bool Bu::UtfString::operator>=( const Bu::UtfString &rhs ) const | |||
718 | return false; | 729 | return false; |
719 | } | 730 | } |
720 | 731 | ||
721 | Bu::String Bu::UtfString::get( Encoding eEnc ) const | 732 | Bu::Blob Bu::UtfString::get( Encoding eEnc ) const |
722 | { | 733 | { |
723 | Bu::MemBuf mb; | 734 | Bu::MemBuf mb; |
724 | write( mb, eEnc ); | 735 | write( mb, eEnc ); |
725 | return mb.getString(); | 736 | return Bu::Blob( mb.getString().getStr(), mb.getString().getSize() ); |
726 | } | 737 | } |
727 | 738 | ||
728 | void Bu::UtfString::debug() const | 739 | void Bu::UtfString::debug() const |
@@ -745,9 +756,9 @@ void Bu::UtfString::debug() const | |||
745 | sio << sio.nl; | 756 | sio << sio.nl; |
746 | } | 757 | } |
747 | /* | 758 | /* |
748 | void Bu::UtfString::debugUtf8( const Bu::String &sUtf8 ) | 759 | void Bu::UtfString::debugUtf8( const Bu::Blob &sUtf8 ) |
749 | { | 760 | { |
750 | for( Bu::String::const_iterator i = sUtf8.begin(); i; i++ ) | 761 | for( Bu::Blob::const_iterator i = sUtf8.begin(); i; i++ ) |
751 | { | 762 | { |
752 | if( i != sUtf8.begin() ) | 763 | if( i != sUtf8.begin() ) |
753 | sio << ", "; | 764 | sio << ", "; |