diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
| commit | c068f22329d5cc722622a2183bbb22eef2093df7 (patch) | |
| tree | 12d56c1aede67988a55e241364606bfbb4dba933 /tool_src/QvLib/QvString.cpp | |
| download | openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip | |
Diffstat (limited to 'tool_src/QvLib/QvString.cpp')
| -rw-r--r-- | tool_src/QvLib/QvString.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tool_src/QvLib/QvString.cpp b/tool_src/QvLib/QvString.cpp new file mode 100644 index 0000000..a5562a3 --- /dev/null +++ b/tool_src/QvLib/QvString.cpp @@ -0,0 +1,106 @@ +#include <QvString.h> + +QvString::~QvString() +{ + if (string != staticStorage) + delete [] string; +} + +void +QvString::expand(int bySize) +{ + int newSize = strlen(string) + bySize + 1; + + if (newSize >= QV_STRING_STATIC_STORAGE_SIZE && + (string == staticStorage || newSize > storageSize)) { + + char *newString = new char[newSize]; + + strcpy(newString, string); + + if (string != staticStorage) + delete [] string; + + string = newString; + storageSize = newSize; + } +} + +u_long +QvString::hash(const char *s) +{ + u_long total, shift; + + total = shift = 0; + while (*s) { + total = total ^ ((*s) << shift); + shift+=5; + if (shift>24) shift -= 24; + s++; + } + + return( total ); +} + +void +QvString::makeEmpty(QvBool freeOld) +{ + if (string != staticStorage) { + if (freeOld) + delete [] string; + string = staticStorage; + } + string[0] = '\0'; +} + +QvString & +QvString::operator =(const char *str) +{ + int size = strlen(str) + 1; + + if (str >= string && + str < string + (string != staticStorage ? storageSize : + QV_STRING_STATIC_STORAGE_SIZE)) { + + QvString tmp = str; + *this = tmp; + return *this; + } + + if (size < QV_STRING_STATIC_STORAGE_SIZE) { + if (string != staticStorage) + makeEmpty(); + } + + else if (string == staticStorage) + string = new char[size]; + + else if (size > storageSize) { + delete [] string; + string = new char[size]; + } + + strcpy(string, str); + storageSize = size; + return *this; +} + +QvString & +QvString::operator +=(const char *str) +{ + expand(strlen(str)); + strcat(string, str); + return *this; +} + +int +operator ==(const QvString &str, const char *s) +{ + return (str.string[0] == s[0] && ! strcmp(str.string, s)); +} + +int +operator !=(const QvString &str, const char *s) +{ + return (str.string[0] != s[0] || strcmp(str.string, s)); +} |
