17 #include "kstlvector.h"
20 extern "C" int sprintfw(
unsigned short* _Dest,
const unsigned short* _format, ...);
21 extern "C" int vsprintfw(
unsigned short* _Dest,
const unsigned short* _format, va_list args);
23 extern "C" void strcpyw(
unsigned short* _Dest,
const char* src);
24 extern "C" void strcpywUtoC(
char * _Dest,
const unsigned short * src);
25 extern "C" int setUnsignedShortToInt(
unsigned short * buffer);
26 extern "C" float setUnsignedShortToFloat(
unsigned short * buffer);
27 extern "C" void convertIntToString(
char * buffer,
int number);
29 typedef unsigned char UTF8Char;
37 explicit usString(
const char* str) :
43 usString(
const UTF8Char* str) :
49 usString(
const unsigned short* str) :
55 usString(
const kstl::string& other) : mString(0) {
59 usString(
const usString& other);
62 void reserve(
int size);
67 operator bool()
const;
69 operator float()
const;
73 operator unsigned int()
const;
75 explicit operator kstl::string()
const;
77 const unsigned short* us_str()
const
88 std::vector<UTF8Char> toUTF8();
91 bool operator == (
const char* str)
94 return usstr == *
this;
97 bool operator == (
const usString& other)
99 const unsigned short* read_char1 = mString;
100 const unsigned short* read_char2 = other.mString;
102 while (*read_char2 == *read_char1)
104 if (*read_char1 == 0)
115 inline const unsigned short& operator[](
unsigned int i)
const
121 inline unsigned short& operator[](
unsigned int i)
127 void strcpywUtoC(
char * _Dest,
const unsigned short * src)
const
129 const unsigned short* read_char = src;
130 char* write_char = _Dest;
134 *write_char = (char)*read_char;
142 bool operator<(
const usString& other)
const
145 const unsigned short* read_char1 = mString;
146 const unsigned short* read_char2 = other.mString;
150 if (*read_char1 < *read_char2)
154 else if (*read_char1 > *read_char2)
160 }
while (((*read_char1) != 0) || ((*read_char2) != 0));
164 kstl::string ToString()
const
166 kstl::string ret =
"";
167 ret.reserve(strlen());
169 const unsigned short* read_char = mString;
173 ret += ((char)*read_char);
182 kstl::string encode();
185 void decode(
const kstl::string& todecode);
189 void removeRange(
size_t start,
int len);
191 kstl::vector<usString> SplitByCharacter(
unsigned short _value)
const
193 kstl::vector<usString> returnedString;
195 unsigned short* read = mString;
197 unsigned int startCount = 0;
198 unsigned int count = 0;
201 if ((*read) == _value)
203 unsigned int size = count + 1;
204 unsigned short* temp =
new unsigned short[size];
206 memset(temp, 0, (size) *
sizeof(
unsigned short));
207 memcpy(temp, mString + startCount, count *
sizeof(
unsigned short));
208 returnedString.push_back(temp);
222 unsigned int size = count + 1;
223 unsigned short* temp =
new unsigned short[size];
225 memset(temp, 0, (size) *
sizeof(
unsigned short));
226 memcpy(temp, mString + startCount, count *
sizeof(
unsigned short));
227 returnedString.push_back(temp);
230 return returnedString;
233 static inline unsigned int strlen(
const char* str)
235 char* read = (
char*)str;
237 unsigned int len = 0;
251 return (strlen(mString) == 0);
254 inline unsigned int length()
const
256 return strlen(mString);
259 usString substr(
int pos,
int len)
const
262 int origlen = strlen(mString);
263 if ((origlen - pos) < len)
273 delete[] result.mString;
274 result.mString =
new unsigned short[len + 1];
275 memcpy(result.mString, mString + pos, len *
sizeof(
unsigned short));
276 result.mString[len] = 0;
281 std::string::size_type find(
unsigned short toFind,
int startpos = 0)
const
283 int Len = strlen(mString);
286 return std::string::npos;
289 unsigned short* read = ((
unsigned short*)mString) + startpos;
290 unsigned int pos = startpos;
300 return std::string::npos;
302 std::string::size_type rfind(
unsigned short toFind,
int startpos = 0)
const
304 int Len = strlen(mString);
307 return std::string::npos;
310 unsigned short* read = ((
unsigned short*)mString) + startpos;
311 unsigned int pos = Len - 1 - startpos;
321 return std::string::npos;
324 std::string::size_type find(
const usString& toFind,
int startpos = 0)
const;
325 std::string::size_type rfind(
const usString& toFind,
int startpos = 0)
const;
328 void replaceAllOccurence(
const usString& toReplace,
const usString& Replacement,
int startpos = 0);
330 void replaceAt(
const usString& Replacement,
int start,
int lenToReplace);
332 void replaceEscapeUnicode();
334 static inline unsigned int strlen(
const unsigned short* str)
336 unsigned short* read = (
unsigned short*)str;
338 unsigned int len = 0;
350 inline unsigned int strlen()
const
352 return strlen(mString);
355 usString& operator=(
const usString& toCopy)
357 copy(toCopy.us_str());
362 bool operator==(
const usString& _value)
const
364 unsigned int len1 = _value.strlen();
365 unsigned int len2 = strlen();
369 unsigned short* read = _value.mString;
370 unsigned short* read2 = mString;
374 if ((*read2) != (*read))
388 bool operator==(
unsigned short* _value)
const
390 unsigned int len1 = strlen(_value);
391 unsigned int len2 = strlen();
395 unsigned short* read = _value;
396 unsigned short* read2 = mString;
400 if ((*read2) != (*read))
414 bool operator!=(
const usString& _value)
const
416 unsigned int len1 = _value.strlen();
417 unsigned int len2 = strlen();
421 unsigned short* read = _value.mString;
422 unsigned short* read2 = mString;
426 if ((*read2) != (*read))
440 bool operator!=(
unsigned short* _value)
const
442 unsigned int len1 = strlen(_value);
443 unsigned int len2 = strlen();
447 unsigned short* read = _value;
448 unsigned short* read2 = mString;
452 if ((*read2) != (*read))
464 usString& operator+=(
const usString& _value)
466 unsigned int len1 = _value.strlen();
467 unsigned int len2 = strlen();
469 unsigned int totalsize = len1 + len2 + 1;
471 unsigned short* result =
new unsigned short[totalsize];
472 memset(result, 0, totalsize *
sizeof(
unsigned short));
474 memcpy(result, mString, len2 *
sizeof(
unsigned short));
476 memcpy(result + len2, _value.mString, len1 *
sizeof(
unsigned short));
486 usString& operator+=(
unsigned short _value)
488 unsigned int len2 = strlen();
491 unsigned int totalsize = 1 + len2 + 1;
493 unsigned short* result =
new unsigned short[totalsize];
494 result[totalsize - 2] = _value;
495 result[totalsize - 1] = 0;
497 memcpy(result, mString, len2 *
sizeof(
unsigned short));
507 inline unsigned int hexaCharacterToInt(
unsigned short character)
509 unsigned int result = 0;
510 if ((character >= 0x30) && (character <= 0x39))
512 result = character - 0x30;
514 else if ((character >= 0x61) && (character <= 0x66))
516 result = character - 0x61 + 10;
518 else if ((character >= 0x41) && (character <= 0x46))
520 result = character - 0x61 + 10;
525 usString& operator+=(
unsigned short* _value)
527 unsigned int len1 = strlen(_value);
528 unsigned int len2 = strlen();
530 unsigned int totalsize = len1 + len2 + 1;
532 unsigned short* result =
new unsigned short[totalsize];
533 memset(result, 0, totalsize *
sizeof(
unsigned short));
535 memcpy(result, mString, len2 *
sizeof(
unsigned short));
536 memcpy(result + len2, _value, len1 *
sizeof(
unsigned short));
544 void removeEscapeBackslash();
548 inline void copy(
const char* str)
554 unsigned int len = strlen(str);
555 mString =
new unsigned short[len + 1];
556 unsigned char* read = (
unsigned char*)str;
557 unsigned short* write = mString;
567 inline void copy(
const unsigned short* str)
573 unsigned int len = strlen(str);
574 mString =
new unsigned short[len + 1];
575 memcpy(mString, str, (len + 1) *
sizeof(
unsigned short));
578 void copy(
const UTF8Char* str);
581 unsigned short* mString;
585 inline usString operator+(
const usString& _l,
const usString& _r)
593 static inline usString ToLowerCase(
const usString& a_entry)
598 unsigned int al = a_entry.length();
600 for (
unsigned int i = 0; i < al; ++i)
602 if (a_entry[i] < 128)
604 str += std::tolower((
char)a_entry[i], loc);
614 #endif // _USSTRING_H