Browse Source

Moved string representation pointer to String_Type.

release/0.19
JustinAJ 11 years ago
parent
commit
be01a8b3c4
  1. 3
      Jupiter/CString.h
  2. 316
      Jupiter/CString_Imp.h
  3. 3
      Jupiter/String_Type.h

3
Jupiter/CString.h

@ -194,7 +194,7 @@ namespace Jupiter
bool contains(const T &value); bool contains(const T &value);
/** Access Operator */ /** Access Operator */
inline T &operator[](size_t pos) { return Jupiter::CString_Type<T>::curr[pos]; }; inline T &operator[](size_t pos) { return Jupiter::String_Type<T>::str[pos]; };
/** Assignment Operators */ /** Assignment Operators */
inline CString_Type<T> &operator=(const CString_Type<T> &right) { this->set(right); return *this; }; inline CString_Type<T> &operator=(const CString_Type<T> &right) { this->set(right); return *this; };
@ -205,7 +205,6 @@ namespace Jupiter
protected: protected:
T *base; /** Base pointer for the underlying C-style string */ T *base; /** Base pointer for the underlying C-style string */
T *curr; /** Active pointer for the underlying C-style string */
size_t strLen; /** Length of underlying C-style string */ size_t strLen; /** Length of underlying C-style string */
}; };

316
Jupiter/CString_Imp.h

@ -34,7 +34,7 @@
template<typename T> const T *Jupiter::CString_Type<T>::c_str() const template<typename T> const T *Jupiter::CString_Type<T>::c_str() const
{ {
return Jupiter::CString_Type<T>::curr; return Jupiter::String_Type<T>::str;
} }
template<typename T> size_t Jupiter::CString_Type<T>::size() const template<typename T> size_t Jupiter::CString_Type<T>::size() const
@ -54,7 +54,7 @@ template<typename T> int Jupiter::CString_Type<T>::compare(const std::basic_stri
template<typename T> int Jupiter::CString_Type<T>::compare(const T *s2) const template<typename T> int Jupiter::CString_Type<T>::compare(const T *s2) const
{ {
const T *s1 = Jupiter::CString_Type<T>::curr; const T *s1 = Jupiter::String_Type<T>::str;
while (*s1 != 0 && *s1 == *s2) while (*s1 != 0 && *s1 == *s2)
{ {
s1++; s1++;
@ -65,7 +65,7 @@ template<typename T> int Jupiter::CString_Type<T>::compare(const T *s2) const
template<typename T> int Jupiter::CString_Type<T>::compare(const T s2) const template<typename T> int Jupiter::CString_Type<T>::compare(const T s2) const
{ {
return *Jupiter::CString_Type<T>::curr - s2; return *Jupiter::String_Type<T>::str - s2;
} }
template<typename T> bool Jupiter::CString_Type<T>::equals(const Jupiter::String_Type<T> &in) const template<typename T> bool Jupiter::CString_Type<T>::equals(const Jupiter::String_Type<T> &in) const
@ -83,12 +83,12 @@ template<typename T> bool Jupiter::CString_Type<T>::equals(const std::basic_stri
template<typename T> bool Jupiter::CString_Type<T>::equals(const T *in) const template<typename T> bool Jupiter::CString_Type<T>::equals(const T *in) const
{ {
if (in == nullptr) return Jupiter::CString_Type<T>::strLen == 0; if (in == nullptr) return Jupiter::CString_Type<T>::strLen == 0;
return Jupiter::streql<T>(Jupiter::CString_Type<T>::curr, in); return Jupiter::streql<T>(Jupiter::String_Type<T>::str, in);
} }
template<typename T> bool Jupiter::CString_Type<T>::equals(const T in) const template<typename T> bool Jupiter::CString_Type<T>::equals(const T in) const
{ {
return *Jupiter::CString_Type<T>::curr == in && ((in == 0) || Jupiter::CString_Type<T>::curr[1] == 0); return *Jupiter::String_Type<T>::str == in && ((in == 0) || Jupiter::String_Type<T>::str[1] == 0);
} }
// equalsi() // equalsi()
@ -107,12 +107,12 @@ template<typename T> bool Jupiter::CString_Type<T>::equalsi(const std::basic_str
template<> bool inline Jupiter::CString_Type<char>::equalsi(const char *in) const template<> bool inline Jupiter::CString_Type<char>::equalsi(const char *in) const
{ {
return streqli(Jupiter::CString_Type<char>::curr, in); return streqli(Jupiter::String_Type<char>::str, in);
} }
template<> bool inline Jupiter::CString_Type<wchar_t>::equalsi(const wchar_t *in) const template<> bool inline Jupiter::CString_Type<wchar_t>::equalsi(const wchar_t *in) const
{ {
return wstreqli(Jupiter::CString_Type<wchar_t>::curr, in); return wstreqli(Jupiter::String_Type<wchar_t>::str, in);
} }
template<typename T> bool Jupiter::CString_Type<T>::equalsi(const T *in) const template<typename T> bool Jupiter::CString_Type<T>::equalsi(const T *in) const
@ -122,12 +122,12 @@ template<typename T> bool Jupiter::CString_Type<T>::equalsi(const T *in) const
template<> bool inline Jupiter::CString_Type<char>::equalsi(const char in) const template<> bool inline Jupiter::CString_Type<char>::equalsi(const char in) const
{ {
return toupper(*Jupiter::CString_Type<char>::curr) == toupper(in) && ((in == 0) || Jupiter::CString_Type<char>::curr[1] == 0); return toupper(*Jupiter::String_Type<char>::str) == toupper(in) && ((in == 0) || Jupiter::String_Type<char>::str[1] == 0);
} }
template<> bool inline Jupiter::CString_Type<wchar_t>::equalsi(const wchar_t in) const template<> bool inline Jupiter::CString_Type<wchar_t>::equalsi(const wchar_t in) const
{ {
return towupper(*Jupiter::CString_Type<wchar_t>::curr) == towupper(in) && ((in == 0) || Jupiter::CString_Type<wchar_t>::curr[1] == 0); return towupper(*Jupiter::String_Type<wchar_t>::str) == towupper(in) && ((in == 0) || Jupiter::String_Type<wchar_t>::str[1] == 0);
} }
template<typename T> bool Jupiter::CString_Type<T>::equalsi(const T in) const template<typename T> bool Jupiter::CString_Type<T>::equalsi(const T in) const
@ -149,12 +149,12 @@ template<typename T> bool Jupiter::CString_Type<T>::match(const std::basic_strin
template<> inline bool Jupiter::CString_Type<char>::match(const char *format) const template<> inline bool Jupiter::CString_Type<char>::match(const char *format) const
{ {
return strmatch(format, Jupiter::CString_Type<char>::curr); return strmatch(format, Jupiter::String_Type<char>::str);
} }
template<> inline bool Jupiter::CString_Type<wchar_t>::match(const wchar_t *format) const template<> inline bool Jupiter::CString_Type<wchar_t>::match(const wchar_t *format) const
{ {
return wstrmatch(format, Jupiter::CString_Type<wchar_t>::curr); return wstrmatch(format, Jupiter::String_Type<wchar_t>::str);
} }
template<typename T> bool Jupiter::CString_Type<T>::match(const T *format) const template<typename T> bool Jupiter::CString_Type<T>::match(const T *format) const
@ -176,12 +176,12 @@ template<typename T> bool Jupiter::CString_Type<T>::matchi(const std::basic_stri
template<> bool inline Jupiter::CString_Type<char>::matchi(const char *format) const template<> bool inline Jupiter::CString_Type<char>::matchi(const char *format) const
{ {
return strmatchi(format, Jupiter::CString_Type<char>::curr); return strmatchi(format, Jupiter::String_Type<char>::str);
} }
template<> bool inline Jupiter::CString_Type<wchar_t>::matchi(const wchar_t *format) const template<> bool inline Jupiter::CString_Type<wchar_t>::matchi(const wchar_t *format) const
{ {
return wstrmatchi(format, Jupiter::CString_Type<wchar_t>::curr); return wstrmatchi(format, Jupiter::String_Type<wchar_t>::str);
} }
template<typename T> bool Jupiter::CString_Type<T>::matchi(const T *format) const template<typename T> bool Jupiter::CString_Type<T>::matchi(const T *format) const
@ -256,7 +256,7 @@ template<typename T> size_t Jupiter::CString_Type<T>::aformat(const T *format, .
template<typename T> unsigned int Jupiter::CString_Type<T>::wordCount(const T *whitespace) const template<typename T> unsigned int Jupiter::CString_Type<T>::wordCount(const T *whitespace) const
{ {
unsigned int result = 0; unsigned int result = 0;
T *p = Jupiter::CString_Type<T>::curr; T *p = Jupiter::String_Type<T>::str;
bool prev = true; bool prev = true;
while (*p != 0) while (*p != 0)
{ {
@ -278,26 +278,26 @@ template<typename T> size_t Jupiter::CString_Type<T>::truncate(size_t n)
{ {
if (n >= Jupiter::CString_Type<T>::strLen) if (n >= Jupiter::CString_Type<T>::strLen)
{ {
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
return 0; return 0;
} }
Jupiter::CString_Type<T>::strLen -= n; Jupiter::CString_Type<T>::strLen -= n;
Jupiter::CString_Type<T>::curr[Jupiter::CString_Type<T>::strLen] = 0; Jupiter::String_Type<T>::str[Jupiter::CString_Type<T>::strLen] = 0;
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
template<typename T> T &Jupiter::CString_Type<T>::get(size_t index) const template<typename T> T &Jupiter::CString_Type<T>::get(size_t index) const
{ {
return Jupiter::CString_Type<T>::curr[index]; return Jupiter::String_Type<T>::str[index];
} }
template<typename T> size_t Jupiter::CString_Type<T>::shiftLeft(size_t length) template<typename T> size_t Jupiter::CString_Type<T>::shiftLeft(size_t length)
{ {
size_t offset = Jupiter::CString_Type<T>::curr - Jupiter::CString_Type<T>::base; size_t offset = Jupiter::String_Type<T>::str - Jupiter::CString_Type<T>::base;
if (length > offset) length = offset; if (length > offset) length = offset;
Jupiter::CString_Type<T>::curr -= length; Jupiter::String_Type<T>::str -= length;
Jupiter::CString_Type<T>::strLen += length; Jupiter::CString_Type<T>::strLen += length;
return length; return length;
} }
@ -305,7 +305,7 @@ template<typename T> size_t Jupiter::CString_Type<T>::shiftLeft(size_t length)
template<typename T> size_t Jupiter::CString_Type<T>::shiftRight(size_t length) template<typename T> size_t Jupiter::CString_Type<T>::shiftRight(size_t length)
{ {
if (length > Jupiter::CString_Type<T>::strLen) length = Jupiter::CString_Type<T>::strLen; if (length > Jupiter::CString_Type<T>::strLen) length = Jupiter::CString_Type<T>::strLen;
Jupiter::CString_Type<T>::curr += length; Jupiter::String_Type<T>::str += length;
Jupiter::CString_Type<T>::strLen -= length; Jupiter::CString_Type<T>::strLen -= length;
return length; return length;
} }
@ -314,7 +314,7 @@ template<typename T> bool Jupiter::CString_Type<T>::remove(T &value)
{ {
for (unsigned int i = 0; i < Jupiter::CString_Type<T>::strLen; i++) for (unsigned int i = 0; i < Jupiter::CString_Type<T>::strLen; i++)
{ {
if (Jupiter::CString_Type<T>::curr[i] == value) if (Jupiter::String_Type<T>::str[i] == value)
{ {
if (i == strLen - 1) Jupiter::CString_Type<T>::truncate(1); if (i == strLen - 1) Jupiter::CString_Type<T>::truncate(1);
else if (i == 0) else if (i == 0)
@ -324,7 +324,7 @@ template<typename T> bool Jupiter::CString_Type<T>::remove(T &value)
} }
else else
{ {
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr + i, Jupiter::CString_Type<T>::curr + i + 1); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str + i, Jupiter::String_Type<T>::str + i + 1);
Jupiter::CString_Type<T>::strLen--; Jupiter::CString_Type<T>::strLen--;
} }
return true; return true;
@ -335,7 +335,7 @@ template<typename T> bool Jupiter::CString_Type<T>::remove(T &value)
template<typename T> bool Jupiter::CString_Type<T>::contains(const T &value) template<typename T> bool Jupiter::CString_Type<T>::contains(const T &value)
{ {
for (unsigned int i = 0; i < Jupiter::CString_Type<T>::strLen; i++) if (Jupiter::CString_Type<T>::curr[i] == value) return true; for (unsigned int i = 0; i < Jupiter::CString_Type<T>::strLen; i++) if (Jupiter::String_Type<T>::str[i] == value) return true;
return false; return false;
} }
@ -347,8 +347,8 @@ template<typename T> bool Jupiter::CString_Type<T>::contains(const T &value)
template<typename T> Jupiter::CString_Strict<T>::CString_Strict() template<typename T> Jupiter::CString_Strict<T>::CString_Strict()
{ {
Jupiter::CString_Type<T>::base = new T[1]; Jupiter::CString_Type<T>::base = new T[1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
} }
@ -356,24 +356,24 @@ template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const Jupiter::C
{ {
Jupiter::CString_Type<T>::strLen = in.strLen; Jupiter::CString_Type<T>::strLen = in.strLen;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.curr); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.str);
} }
template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const Jupiter::String_Type<T> &in) template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const Jupiter::String_Type<T> &in)
{ {
Jupiter::CString_Type<T>::strLen = in.size(); Jupiter::CString_Type<T>::strLen = in.size();
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
} }
template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const std::basic_string<T> &in) template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const std::basic_string<T> &in)
{ {
Jupiter::CString_Type<T>::strLen = in.size(); Jupiter::CString_Type<T>::strLen = in.size();
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
} }
template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const T *in) template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const T *in)
@ -382,15 +382,15 @@ template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const T *in)
{ {
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
Jupiter::CString_Type<T>::base = new T[1]; Jupiter::CString_Type<T>::base = new T[1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
} }
else else
{ {
Jupiter::CString_Type<T>::strLen = Jupiter::strlen<T>(in); Jupiter::CString_Type<T>::strLen = Jupiter::strlen<T>(in);
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in);
} }
} }
@ -400,16 +400,16 @@ template<typename T> Jupiter::CString_Strict<T>::CString_Strict(const T c)
{ {
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
Jupiter::CString_Type<T>::base = new T[1]; Jupiter::CString_Type<T>::base = new T[1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
} }
else else
{ {
Jupiter::CString_Type<T>::strLen = 1; Jupiter::CString_Type<T>::strLen = 1;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Type<T>::strLen + 1];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = c; *Jupiter::String_Type<T>::str = c;
Jupiter::CString_Type<T>::curr[1] = 0; Jupiter::String_Type<T>::str[1] = 0;
} }
} }
@ -433,10 +433,10 @@ template<> size_t inline Jupiter::CString_Strict<char>::vformat(const char *form
delete[] Jupiter::CString_Type<char>::base; delete[] Jupiter::CString_Type<char>::base;
Jupiter::CString_Type<char>::base = new char[minLen + 1]; Jupiter::CString_Type<char>::base = new char[minLen + 1];
} }
Jupiter::CString_Type<char>::curr = Jupiter::CString_Type<char>::base; Jupiter::String_Type<char>::str = Jupiter::CString_Type<char>::base;
Jupiter::CString_Type<char>::strLen = minLen; Jupiter::CString_Type<char>::strLen = minLen;
vsnprintf(Jupiter::CString_Type<char>::curr, Jupiter::CString_Type<char>::strLen, format, args); vsnprintf(Jupiter::String_Type<char>::str, Jupiter::CString_Type<char>::strLen, format, args);
Jupiter::CString_Type<char>::curr[Jupiter::CString_Type<char>::strLen] = 0; Jupiter::String_Type<char>::str[Jupiter::CString_Type<char>::strLen] = 0;
return Jupiter::CString_Type<char>::strLen; return Jupiter::CString_Type<char>::strLen;
} }
@ -453,10 +453,10 @@ template<> size_t inline Jupiter::CString_Strict<wchar_t>::vformat(const wchar_t
delete[] Jupiter::CString_Type<wchar_t>::base; delete[] Jupiter::CString_Type<wchar_t>::base;
Jupiter::CString_Type<wchar_t>::base = new wchar_t[minLen + 1]; Jupiter::CString_Type<wchar_t>::base = new wchar_t[minLen + 1];
} }
Jupiter::CString_Type<wchar_t>::curr = Jupiter::CString_Type<wchar_t>::base; Jupiter::String_Type<wchar_t>::str = Jupiter::CString_Type<wchar_t>::base;
Jupiter::CString_Type<wchar_t>::strLen = minLen; Jupiter::CString_Type<wchar_t>::strLen = minLen;
vswprintf(Jupiter::CString_Type<wchar_t>::curr, Jupiter::CString_Type<wchar_t>::strLen, format, args); vswprintf(Jupiter::String_Type<wchar_t>::str, Jupiter::CString_Type<wchar_t>::strLen, format, args);
Jupiter::CString_Type<wchar_t>::curr[Jupiter::CString_Type<wchar_t>::strLen] = 0; Jupiter::String_Type<wchar_t>::str[Jupiter::CString_Type<wchar_t>::strLen] = 0;
return Jupiter::CString_Type<wchar_t>::strLen; return Jupiter::CString_Type<wchar_t>::strLen;
} }
@ -477,15 +477,15 @@ template<> size_t inline Jupiter::CString_Strict<char>::avformat(const char *for
if (minLen < 0) return 0; // We simply can not work with this. if (minLen < 0) return 0; // We simply can not work with this.
char *t = new char[minLen + Jupiter::CString_Type<char>::strLen + 1]; char *t = new char[minLen + Jupiter::CString_Type<char>::strLen + 1];
Jupiter::strcpy<char>(t, Jupiter::CString_Type<char>::curr); Jupiter::strcpy<char>(t, Jupiter::String_Type<char>::str);
delete[] Jupiter::CString_Type<char>::base; delete[] Jupiter::CString_Type<char>::base;
Jupiter::CString_Type<char>::base = t; Jupiter::CString_Type<char>::base = t;
Jupiter::CString_Type<char>::curr = Jupiter::CString_Type<char>::base; Jupiter::String_Type<char>::str = Jupiter::CString_Type<char>::base;
minLen = vsnprintf(Jupiter::CString_Type<char>::curr + Jupiter::CString_Type<char>::strLen, minLen, format, args); minLen = vsnprintf(Jupiter::String_Type<char>::str + Jupiter::CString_Type<char>::strLen, minLen, format, args);
if (minLen <= 0) return 0; if (minLen <= 0) return 0;
Jupiter::CString_Type<char>::strLen += minLen; Jupiter::CString_Type<char>::strLen += minLen;
Jupiter::CString_Type<char>::curr[Jupiter::CString_Type<char>::strLen] = 0; Jupiter::String_Type<char>::str[Jupiter::CString_Type<char>::strLen] = 0;
return minLen; return minLen;
} }
@ -499,15 +499,15 @@ template<> size_t inline Jupiter::CString_Strict<wchar_t>::avformat(const wchar_
if (minLen < 0) return 0; // We simply can not work with this. if (minLen < 0) return 0; // We simply can not work with this.
wchar_t *t = new wchar_t[minLen + Jupiter::CString_Type<wchar_t>::strLen + 1]; wchar_t *t = new wchar_t[minLen + Jupiter::CString_Type<wchar_t>::strLen + 1];
Jupiter::strcpy<wchar_t>(t, Jupiter::CString_Type<wchar_t>::curr); Jupiter::strcpy<wchar_t>(t, Jupiter::String_Type<wchar_t>::str);
delete[] Jupiter::CString_Type<wchar_t>::base; delete[] Jupiter::CString_Type<wchar_t>::base;
Jupiter::CString_Type<wchar_t>::base = t; Jupiter::CString_Type<wchar_t>::base = t;
Jupiter::CString_Type<wchar_t>::curr = Jupiter::CString_Type<wchar_t>::base; Jupiter::String_Type<wchar_t>::str = Jupiter::CString_Type<wchar_t>::base;
minLen = vswprintf(Jupiter::CString_Type<wchar_t>::curr + Jupiter::CString_Type<wchar_t>::strLen, minLen, format, args); minLen = vswprintf(Jupiter::String_Type<wchar_t>::str + Jupiter::CString_Type<wchar_t>::strLen, minLen, format, args);
if (minLen <= 0) return 0; if (minLen <= 0) return 0;
Jupiter::CString_Type<wchar_t>::strLen += minLen; Jupiter::CString_Type<wchar_t>::strLen += minLen;
Jupiter::CString_Type<wchar_t>::curr[Jupiter::CString_Type<wchar_t>::strLen] = 0; Jupiter::String_Type<wchar_t>::str[Jupiter::CString_Type<wchar_t>::strLen] = 0;
return minLen; return minLen;
} }
@ -530,7 +530,7 @@ template<typename T> Jupiter::CString_Strict<T> Jupiter::CString_Strict<T>::subs
{ {
Jupiter::CString_Strict<T> r; Jupiter::CString_Strict<T> r;
r.setString(new char[length + 1], length); r.setString(new char[length + 1], length);
r.strLen = Jupiter::strlen<T>(Jupiter::strcpy<T>(r.curr, Jupiter::CString_Type<T>::curr + pos, length)); r.strLen = Jupiter::strlen<T>(Jupiter::strcpy<T>(r.str, Jupiter::String_Type<T>::str + pos, length));
return r; return r;
} }
@ -572,13 +572,13 @@ template<typename T> Jupiter::CString_Strict<T> Jupiter::CString_Strict<T>::getW
r.strLen = y - x; r.strLen = y - x;
delete[] r.base; delete[] r.base;
r.base = new char[r.strLen + 1]; r.base = new char[r.strLen + 1];
r.curr = r.base; r.str = r.base;
for (i = 0; x < y; i++) for (i = 0; x < y; i++)
{ {
r.curr[i] = in[x]; r.str[i] = in[x];
x++; x++;
} }
r.curr[r.strLen] = 0; r.str[r.strLen] = 0;
return r; return r;
} }
@ -622,9 +622,9 @@ template<typename T> size_t Jupiter::CString_Strict<T>::set(const String_Type<T>
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = new T[sSize + 1]; Jupiter::CString_Type<T>::base = new T[sSize + 1];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize; Jupiter::CString_Type<T>::strLen = sSize;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
return sSize; return sSize;
} }
@ -636,9 +636,9 @@ template<typename T> size_t Jupiter::CString_Strict<T>::set(const std::basic_str
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = new T[sSize + 1]; Jupiter::CString_Type<T>::base = new T[sSize + 1];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize; Jupiter::CString_Type<T>::strLen = sSize;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
return sSize; return sSize;
} }
@ -650,9 +650,9 @@ template<typename T> size_t Jupiter::CString_Strict<T>::set(const T *in)
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = new T[sSize + 1]; Jupiter::CString_Type<T>::base = new T[sSize + 1];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize; Jupiter::CString_Type<T>::strLen = sSize;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in);
return sSize; return sSize;
} }
@ -660,8 +660,8 @@ template<typename T> size_t Jupiter::CString_Strict<T>::set(const T in)
{ {
if (in == 0) if (in == 0)
{ {
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
return Jupiter::CString_Type<T>::strLen = 0; return Jupiter::CString_Type<T>::strLen = 0;
} }
if (Jupiter::CString_Type<T>::strLen < 1) if (Jupiter::CString_Type<T>::strLen < 1)
@ -669,9 +669,9 @@ template<typename T> size_t Jupiter::CString_Strict<T>::set(const T in)
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = new T[2]; Jupiter::CString_Type<T>::base = new T[2];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = in; *Jupiter::String_Type<T>::str = in;
Jupiter::CString_Type<T>::curr[1] = 0; Jupiter::String_Type<T>::str[1] = 0;
return Jupiter::CString_Type<T>::strLen = 1; return Jupiter::CString_Type<T>::strLen = 1;
} }
@ -684,7 +684,7 @@ template<typename T> size_t Jupiter::CString_Strict<T>::setString(T *in, size_t
{ {
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = in; Jupiter::CString_Type<T>::base = in;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
return Jupiter::CString_Type<T>::strLen = size; return Jupiter::CString_Type<T>::strLen = size;
} }
@ -692,11 +692,11 @@ template<typename T> size_t Jupiter::CString_Strict<T>::concat(const String_Type
{ {
size_t nSize = Jupiter::CString_Type<T>::strLen + in.size(); size_t nSize = Jupiter::CString_Type<T>::strLen + in.size();
T *tmp = new T[nSize + 1]; T *tmp = new T[nSize + 1];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in.c_str()); Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in.c_str());
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = nSize; Jupiter::CString_Type<T>::strLen = nSize;
return nSize; return nSize;
} }
@ -705,11 +705,11 @@ template<typename T> size_t Jupiter::CString_Strict<T>::concat(const std::basic_
{ {
size_t nSize = Jupiter::CString_Type<T>::strLen + in.size(); size_t nSize = Jupiter::CString_Type<T>::strLen + in.size();
T *tmp = new T[nSize + 1]; T *tmp = new T[nSize + 1];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in.c_str()); Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in.c_str());
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = nSize; Jupiter::CString_Type<T>::strLen = nSize;
return nSize; return nSize;
} }
@ -718,11 +718,11 @@ template<typename T> size_t Jupiter::CString_Strict<T>::concat(const T *in)
{ {
size_t nSize = Jupiter::CString_Type<T>::strLen + Jupiter::strlen<T>(in); size_t nSize = Jupiter::CString_Type<T>::strLen + Jupiter::strlen<T>(in);
T *tmp = new T[nSize + 1]; T *tmp = new T[nSize + 1];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in); Jupiter::strcpy<T>(tmp + Jupiter::CString_Type<T>::strLen, in);
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = nSize; Jupiter::CString_Type<T>::strLen = nSize;
return nSize; return nSize;
} }
@ -731,12 +731,12 @@ template<typename T> size_t Jupiter::CString_Strict<T>::concat(const T c)
{ {
size_t nSize = Jupiter::CString_Type<T>::strLen + 1; size_t nSize = Jupiter::CString_Type<T>::strLen + 1;
T *tmp = new T[nSize + 1]; T *tmp = new T[nSize + 1];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
tmp[nSize - 1] = c; tmp[nSize - 1] = c;
tmp[nSize] = 0; tmp[nSize] = 0;
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = nSize; Jupiter::CString_Type<T>::strLen = nSize;
return nSize; return nSize;
} }
@ -750,8 +750,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose()
{ {
Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size; Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
} }
@ -759,8 +759,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const Jupiter::CSt
{ {
Jupiter::CString_Loose<T>::strSize = in.strSize; Jupiter::CString_Loose<T>::strSize = in.strSize;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.curr); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.str);
Jupiter::CString_Type<T>::strLen = in.strLen; Jupiter::CString_Type<T>::strLen = in.strLen;
} }
@ -770,8 +770,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const Jupiter::Str
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1);
if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8; if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
} }
template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const std::basic_string<T> &in) template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const std::basic_string<T> &in)
@ -780,8 +780,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const std::basic_s
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1);
if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8; if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
} }
template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const T *in) template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const T *in)
@ -790,8 +790,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const T *in)
{ {
Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size; Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
} }
else else
@ -800,8 +800,8 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const T *in)
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Type<T>::strLen + 1);
if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8; if (Jupiter::CString_Loose<T>::strSize < 8) Jupiter::CString_Loose<T>::strSize = 8;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in);
} }
} }
@ -809,17 +809,17 @@ template<typename T> Jupiter::CString_Loose<T>::CString_Loose(const T in)
{ {
Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size; Jupiter::CString_Loose<T>::strSize = Jupiter::CString_Loose<T>::start_size;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
if (in == 0) if (in == 0)
{ {
Jupiter::CString_Type<T>::strLen = 0; Jupiter::CString_Type<T>::strLen = 0;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
} }
else else
{ {
Jupiter::CString_Type<T>::strLen = 1; Jupiter::CString_Type<T>::strLen = 1;
*Jupiter::CString_Type<T>::curr = in; *Jupiter::String_Type<T>::str = in;
Jupiter::CString_Type<T>::curr[1] = 0; Jupiter::String_Type<T>::str[1] = 0;
} }
} }
@ -842,10 +842,10 @@ template<> size_t inline Jupiter::CString_Loose<char>::vformat(const char *forma
Jupiter::CString_Loose<char>::strSize = getPowerTwo32(minLen + 1); Jupiter::CString_Loose<char>::strSize = getPowerTwo32(minLen + 1);
Jupiter::CString_Type<char>::base = new char[Jupiter::CString_Loose<char>::strSize]; Jupiter::CString_Type<char>::base = new char[Jupiter::CString_Loose<char>::strSize];
} }
Jupiter::CString_Type<char>::curr = Jupiter::CString_Type<char>::base; Jupiter::String_Type<char>::str = Jupiter::CString_Type<char>::base;
Jupiter::CString_Type<char>::strLen = minLen; Jupiter::CString_Type<char>::strLen = minLen;
vsnprintf(Jupiter::CString_Type<char>::curr, Jupiter::CString_Loose<char>::strSize, format, args); vsnprintf(Jupiter::String_Type<char>::str, Jupiter::CString_Loose<char>::strSize, format, args);
Jupiter::CString_Type<char>::curr[Jupiter::CString_Type<char>::strLen] = 0; Jupiter::String_Type<char>::str[Jupiter::CString_Type<char>::strLen] = 0;
return Jupiter::CString_Type<char>::strLen; return Jupiter::CString_Type<char>::strLen;
} }
@ -863,10 +863,10 @@ template<> size_t inline Jupiter::CString_Loose<wchar_t>::vformat(const wchar_t
Jupiter::CString_Loose<wchar_t>::strSize = getPowerTwo32(minLen + 1); Jupiter::CString_Loose<wchar_t>::strSize = getPowerTwo32(minLen + 1);
Jupiter::CString_Type<wchar_t>::base = new wchar_t[Jupiter::CString_Loose<wchar_t>::strSize]; Jupiter::CString_Type<wchar_t>::base = new wchar_t[Jupiter::CString_Loose<wchar_t>::strSize];
} }
Jupiter::CString_Type<wchar_t>::curr = Jupiter::CString_Type<wchar_t>::base; Jupiter::String_Type<wchar_t>::str = Jupiter::CString_Type<wchar_t>::base;
Jupiter::CString_Type<wchar_t>::strLen = minLen; Jupiter::CString_Type<wchar_t>::strLen = minLen;
vswprintf(Jupiter::CString_Type<wchar_t>::curr, Jupiter::CString_Loose<wchar_t>::strSize, format, args); vswprintf(Jupiter::String_Type<wchar_t>::str, Jupiter::CString_Loose<wchar_t>::strSize, format, args);
Jupiter::CString_Type<wchar_t>::curr[Jupiter::CString_Type<wchar_t>::strLen] = 0; Jupiter::String_Type<wchar_t>::str[Jupiter::CString_Type<wchar_t>::strLen] = 0;
return Jupiter::CString_Type<wchar_t>::strLen; return Jupiter::CString_Type<wchar_t>::strLen;
} }
@ -888,20 +888,20 @@ template<> size_t inline Jupiter::CString_Loose<char>::avformat(const char *form
{ {
Jupiter::CString_Loose<char>::strSize = getPowerTwo32(minLen + 1); Jupiter::CString_Loose<char>::strSize = getPowerTwo32(minLen + 1);
char *tmpStr = new char[Jupiter::CString_Loose<char>::strSize]; char *tmpStr = new char[Jupiter::CString_Loose<char>::strSize];
Jupiter::strcpy<char>(tmpStr, Jupiter::CString_Type<char>::curr); Jupiter::strcpy<char>(tmpStr, Jupiter::String_Type<char>::str);
delete[] Jupiter::CString_Type<char>::base; delete[] Jupiter::CString_Type<char>::base;
Jupiter::CString_Type<char>::base = tmpStr; Jupiter::CString_Type<char>::base = tmpStr;
Jupiter::CString_Type<char>::curr = Jupiter::CString_Type<char>::base; Jupiter::String_Type<char>::str = Jupiter::CString_Type<char>::base;
} }
else if ((unsigned)minLen + 1 + (Jupiter::CString_Type<char>::curr - Jupiter::CString_Type<char>::base) > Jupiter::CString_Loose<char>::strSize) else if ((unsigned)minLen + 1 + (Jupiter::String_Type<char>::str - Jupiter::CString_Type<char>::base) > Jupiter::CString_Loose<char>::strSize)
{ {
Jupiter::strcpy<char>(Jupiter::CString_Type<char>::base, Jupiter::CString_Type<char>::curr); Jupiter::strcpy<char>(Jupiter::CString_Type<char>::base, Jupiter::String_Type<char>::str);
Jupiter::CString_Type<char>::curr = Jupiter::CString_Type<char>::base; Jupiter::String_Type<char>::str = Jupiter::CString_Type<char>::base;
} }
minLen = vsnprintf(Jupiter::CString_Type<char>::curr + Jupiter::CString_Type<char>::strLen, Jupiter::CString_Loose<char>::strSize - Jupiter::CString_Type<char>::strLen, format, args); minLen = vsnprintf(Jupiter::String_Type<char>::str + Jupiter::CString_Type<char>::strLen, Jupiter::CString_Loose<char>::strSize - Jupiter::CString_Type<char>::strLen, format, args);
if (minLen <= 0) return 0; if (minLen <= 0) return 0;
Jupiter::CString_Type<char>::strLen += minLen; Jupiter::CString_Type<char>::strLen += minLen;
Jupiter::CString_Type<char>::curr[Jupiter::CString_Type<char>::strLen] = 0; Jupiter::String_Type<char>::str[Jupiter::CString_Type<char>::strLen] = 0;
return minLen; return minLen;
} }
@ -918,20 +918,20 @@ template<> size_t inline Jupiter::CString_Loose<wchar_t>::avformat(const wchar_t
{ {
Jupiter::CString_Loose<wchar_t>::strSize = getPowerTwo32(minLen + 1); Jupiter::CString_Loose<wchar_t>::strSize = getPowerTwo32(minLen + 1);
wchar_t *tmpStr = new wchar_t[Jupiter::CString_Loose<wchar_t>::strSize]; wchar_t *tmpStr = new wchar_t[Jupiter::CString_Loose<wchar_t>::strSize];
Jupiter::strcpy<wchar_t>(tmpStr, Jupiter::CString_Type<wchar_t>::curr); Jupiter::strcpy<wchar_t>(tmpStr, Jupiter::String_Type<wchar_t>::str);
delete[] Jupiter::CString_Type<wchar_t>::base; delete[] Jupiter::CString_Type<wchar_t>::base;
Jupiter::CString_Type<wchar_t>::base = tmpStr; Jupiter::CString_Type<wchar_t>::base = tmpStr;
Jupiter::CString_Type<wchar_t>::curr = Jupiter::CString_Type<wchar_t>::base; Jupiter::String_Type<wchar_t>::str = Jupiter::CString_Type<wchar_t>::base;
} }
else if ((unsigned)minLen + 1 + (Jupiter::CString_Type<wchar_t>::curr - Jupiter::CString_Type<wchar_t>::base) > Jupiter::CString_Loose<wchar_t>::strSize) else if ((unsigned)minLen + 1 + (Jupiter::String_Type<wchar_t>::str - Jupiter::CString_Type<wchar_t>::base) > Jupiter::CString_Loose<wchar_t>::strSize)
{ {
Jupiter::strcpy(Jupiter::CString_Type<wchar_t>::base, Jupiter::CString_Type<wchar_t>::curr); Jupiter::strcpy(Jupiter::CString_Type<wchar_t>::base, Jupiter::String_Type<wchar_t>::str);
Jupiter::CString_Type<wchar_t>::curr = Jupiter::CString_Type<wchar_t>::base; Jupiter::String_Type<wchar_t>::str = Jupiter::CString_Type<wchar_t>::base;
} }
minLen = vswprintf(Jupiter::CString_Type<wchar_t>::curr + Jupiter::CString_Type<wchar_t>::strLen, Jupiter::CString_Loose<wchar_t>::strSize - Jupiter::CString_Type<wchar_t>::strLen, format, args); minLen = vswprintf(Jupiter::String_Type<wchar_t>::str + Jupiter::CString_Type<wchar_t>::strLen, Jupiter::CString_Loose<wchar_t>::strSize - Jupiter::CString_Type<wchar_t>::strLen, format, args);
if (minLen <= 0) return 0; if (minLen <= 0) return 0;
Jupiter::CString_Type<wchar_t>::strLen += minLen; Jupiter::CString_Type<wchar_t>::strLen += minLen;
Jupiter::CString_Type<wchar_t>::curr[Jupiter::CString_Type<wchar_t>::strLen] = 0; Jupiter::String_Type<wchar_t>::str[Jupiter::CString_Type<wchar_t>::strLen] = 0;
return minLen; return minLen;
} }
@ -956,9 +956,9 @@ template<typename T> Jupiter::CString_Loose<T> Jupiter::CString_Loose<T>::substr
r.strSize = getPowerTwo32(length + 1); r.strSize = getPowerTwo32(length + 1);
delete[] r.base; delete[] r.base;
r.base = new char[r.strSize]; r.base = new char[r.strSize];
r.curr = r.base; r.str = r.base;
r.strLen = length; r.strLen = length;
Jupiter::strcpy<T>(r.curr, Jupiter::CString_Type<T>::curr + pos, length); Jupiter::strcpy<T>(r.str, Jupiter::String_Type<T>::str + pos, length);
return r; return r;
} }
@ -1000,13 +1000,13 @@ template<typename T> Jupiter::CString_Loose<T> Jupiter::CString_Loose<T>::getWor
r.strSize = getPowerTwo32(r.strLen + 1); r.strSize = getPowerTwo32(r.strLen + 1);
delete[] r.base; delete[] r.base;
r.base = new char[r.strSize]; r.base = new char[r.strSize];
r.curr = r.base; r.str = r.base;
for (i = 0; x < y; i++) for (i = 0; x < y; i++)
{ {
r.curr[i] = in[x]; r.str[i] = in[x];
x++; x++;
} }
r.curr[i] = 0; r.str[i] = 0;
return r; return r;
} }
@ -1050,9 +1050,9 @@ template<typename T> size_t Jupiter::CString_Loose<T>::set(const CString_Loose<T
Jupiter::CString_Loose<T>::strSize = in.strSize; Jupiter::CString_Loose<T>::strSize = in.strSize;
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = in.strLen; Jupiter::CString_Type<T>::strLen = in.strLen;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.curr); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.str);
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1065,9 +1065,9 @@ template<typename T> size_t Jupiter::CString_Loose<T>::set(const String_Type<T>
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize);
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize - 1; Jupiter::CString_Type<T>::strLen = sSize - 1;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1080,9 +1080,9 @@ template<typename T> size_t Jupiter::CString_Loose<T>::set(const std::basic_stri
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize);
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize - 1; Jupiter::CString_Type<T>::strLen = sSize - 1;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in.c_str());
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1095,9 +1095,9 @@ template<typename T> size_t Jupiter::CString_Loose<T>::set(const T *in)
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(sSize);
Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize]; Jupiter::CString_Type<T>::base = new T[Jupiter::CString_Loose<T>::strSize];
} }
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::strLen = sSize - 1; Jupiter::CString_Type<T>::strLen = sSize - 1;
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr, in); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str, in);
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1105,14 +1105,14 @@ template<typename T> size_t Jupiter::CString_Loose<T>::set(const T in)
{ {
if (in == 0) if (in == 0)
{ {
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = 0; *Jupiter::String_Type<T>::str = 0;
return Jupiter::CString_Type<T>::strLen = 0; return Jupiter::CString_Type<T>::strLen = 0;
} }
Jupiter::CString_Type<T>::strLen = 1; Jupiter::CString_Type<T>::strLen = 1;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
*Jupiter::CString_Type<T>::curr = in; *Jupiter::String_Type<T>::str = in;
Jupiter::CString_Type<T>::curr[1] = 0; Jupiter::String_Type<T>::str[1] = 0;
return 1; return 1;
} }
@ -1123,17 +1123,17 @@ template<typename T> size_t Jupiter::CString_Loose<T>::concat(const String_Type<
{ {
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1);
T *tmp = new T[Jupiter::CString_Loose<T>::strSize]; T *tmp = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
else if (nLen + 1 + (Jupiter::CString_Type<T>::curr - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize) else if (nLen + 1 + (Jupiter::String_Type<T>::str - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize)
{ {
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::String_Type<T>::str);
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr + Jupiter::CString_Type<T>::strLen, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str + Jupiter::CString_Type<T>::strLen, in.c_str());
Jupiter::CString_Type<T>::strLen = nLen; Jupiter::CString_Type<T>::strLen = nLen;
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1145,17 +1145,17 @@ template<typename T> size_t Jupiter::CString_Loose<T>::concat(const std::basic_s
{ {
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1);
T *tmp = new T[Jupiter::CString_Loose<T>::strSize]; T *tmp = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
else if (nLen + 1 + (Jupiter::CString_Type<T>::curr - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize) else if (nLen + 1 + (Jupiter::String_Type<T>::str - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize)
{ {
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::String_Type<T>::str);
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr + Jupiter::CString_Type<T>::strLen, in.c_str()); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str + Jupiter::CString_Type<T>::strLen, in.c_str());
Jupiter::CString_Type<T>::strLen = nLen; Jupiter::CString_Type<T>::strLen = nLen;
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1167,17 +1167,17 @@ template<typename T> size_t Jupiter::CString_Loose<T>::concat(const T *in)
{ {
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(nLen + 1);
T *tmp = new T[Jupiter::CString_Loose<T>::strSize]; T *tmp = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
else if (nLen + 1 + (Jupiter::CString_Type<T>::curr - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize) else if (nLen + 1 + (Jupiter::String_Type<T>::str - Jupiter::CString_Type<T>::base) > Jupiter::CString_Loose<T>::strSize)
{ {
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::String_Type<T>::str);
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::curr + Jupiter::CString_Type<T>::strLen, in); Jupiter::strcpy<T>(Jupiter::String_Type<T>::str + Jupiter::CString_Type<T>::strLen, in);
Jupiter::CString_Type<T>::strLen = nLen; Jupiter::CString_Type<T>::strLen = nLen;
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }
@ -1188,19 +1188,19 @@ template<typename T> size_t Jupiter::CString_Loose<T>::concat(const T in)
{ {
Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Loose<T>::strSize + 1); Jupiter::CString_Loose<T>::strSize = getPowerTwo32(Jupiter::CString_Loose<T>::strSize + 1);
T *tmp = new T[Jupiter::CString_Loose<T>::strSize]; T *tmp = new T[Jupiter::CString_Loose<T>::strSize];
Jupiter::strcpy<T>(tmp, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(tmp, Jupiter::String_Type<T>::str);
delete[] Jupiter::CString_Type<T>::base; delete[] Jupiter::CString_Type<T>::base;
Jupiter::CString_Type<T>::base = tmp; Jupiter::CString_Type<T>::base = tmp;
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
else if (Jupiter::CString_Type<T>::strLen + 1 + (Jupiter::CString_Type<T>::curr - Jupiter::CString_Type<T>::base) >= Jupiter::CString_Loose<T>::strSize) else if (Jupiter::CString_Type<T>::strLen + 1 + (Jupiter::String_Type<T>::str - Jupiter::CString_Type<T>::base) >= Jupiter::CString_Loose<T>::strSize)
{ {
Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::CString_Type<T>::curr); Jupiter::strcpy<T>(Jupiter::CString_Type<T>::base, Jupiter::String_Type<T>::str);
Jupiter::CString_Type<T>::curr = Jupiter::CString_Type<T>::base; Jupiter::String_Type<T>::str = Jupiter::CString_Type<T>::base;
} }
Jupiter::CString_Type<T>::curr[Jupiter::CString_Type<T>::strLen] = in; Jupiter::String_Type<T>::str[Jupiter::CString_Type<T>::strLen] = in;
Jupiter::CString_Type<T>::strLen++; Jupiter::CString_Type<T>::strLen++;
Jupiter::CString_Type<T>::curr[Jupiter::CString_Type<T>::strLen] = 0; Jupiter::String_Type<T>::str[Jupiter::CString_Type<T>::strLen] = 0;
return Jupiter::CString_Type<T>::strLen; return Jupiter::CString_Type<T>::strLen;
} }

3
Jupiter/String_Type.h

@ -245,6 +245,9 @@ namespace Jupiter
* A copy constructor for std::basic_string<T>. * A copy constructor for std::basic_string<T>.
* A copy constructor for C-style strings. * A copy constructor for C-style strings.
*/ */
protected:
T *str; /** Pointer for the underlying string of elements */
}; };
/** Generic String Type */ /** Generic String Type */

Loading…
Cancel
Save