diff options
-rw-r--r-- | common/str.cpp | 78 | ||||
-rw-r--r-- | common/str.h | 15 |
2 files changed, 76 insertions, 17 deletions
diff --git a/common/str.cpp b/common/str.cpp index 575bb6bdf8..a170099f70 100644 --- a/common/str.cpp +++ b/common/str.cpp @@ -22,6 +22,7 @@ #include "common/stdafx.h" #include "common/str.h" +#include "common/hash.h" #include "common/util.h" #include <ctype.h> @@ -283,40 +284,92 @@ void String::ensureCapacity(int new_len, bool keep_old) { _str = newStr; } +uint String::hash() const { + return hashit(c_str()); +} + #pragma mark - bool String::operator ==(const String &x) const { - return (0 == strcmp(c_str(), x.c_str())); + return equals(x); } bool String::operator ==(const char *x) const { assert(x != 0); - return (0 == strcmp(c_str(), x)); + return equals(x); } bool String::operator !=(const String &x) const { - return (0 != strcmp(c_str(), x.c_str())); + return !equals(x); } bool String::operator !=(const char *x) const { assert(x != 0); - return (0 != strcmp(c_str(), x)); + return !equals(x); } bool String::operator < (const String &x) const { - return strcmp(c_str(), x.c_str()) < 0; + return compareTo(x) < 0; } bool String::operator <= (const String &x) const { - return strcmp(c_str(), x.c_str()) <= 0; + return compareTo(x) <= 0; } bool String::operator > (const String &x) const { - return (x < *this); + return compareTo(x) > 0; } bool String::operator >= (const String &x) const { - return (x <= *this); + return compareTo(x) >= 0; +} + +#pragma mark - + +bool operator == (const char* y, const String &x) { + return (x == y); +} + +bool operator != (const char* y, const String &x) { + return x != y; +} + +#pragma mark - + +bool String::equals(const String &x) const { + return (0 == compareTo(x)); +} + +bool String::equals(const char *x) const { + assert(x != 0); + return (0 == compareTo(x)); +} + +bool String::equalsIgnoreCase(const String &x) const { + return (0 == compareToIgnoreCase(x)); +} + +bool String::equalsIgnoreCase(const char *x) const { + assert(x != 0); + return (0 == compareToIgnoreCase(x)); +} + +int String::compareTo(const String &x) const { + return compareTo(x.c_str()); +} + +int String::compareTo(const char *x) const { + assert(x != 0); + return strcmp(c_str(), x); +} + +int String::compareToIgnoreCase(const String &x) const { + return compareToIgnoreCase(x.c_str()); +} + +int String::compareToIgnoreCase(const char *x) const { + assert(x != 0); + return scumm_stricmp(c_str(), x); } #pragma mark - @@ -339,14 +392,5 @@ String operator +(const String &x, const char *y) { return temp; } -#pragma mark - - -bool operator == (const char* y, const String &x) { - return (x == y); -} - -bool operator != (const char* y, const String &x) { - return x != y; -} } // End of namespace Common diff --git a/common/str.h b/common/str.h index 3d0053618b..5110fdf6d6 100644 --- a/common/str.h +++ b/common/str.h @@ -60,11 +60,24 @@ public: bool operator ==(const char *x) const; bool operator !=(const String &x) const; bool operator !=(const char *x) const; + bool operator <(const String &x) const; bool operator <=(const String &x) const; bool operator >(const String &x) const; bool operator >=(const String &x) const; + bool equals(const String &x) const; + bool equalsIgnoreCase(const String &x) const; + int compareTo(const String &x) const; // strcmp clone + int compareToIgnoreCase(const String &x) const; // stricmp clone + + bool equals(const char *x) const; + bool equalsIgnoreCase(const char *x) const; + int compareTo(const char *x) const; // strcmp clone + int compareToIgnoreCase(const char *x) const; // stricmp clone + + + bool hasSuffix(const char *x) const; bool hasPrefix(const char *x) const; @@ -92,6 +105,8 @@ public: void toLowercase(); void toUppercase(); + uint hash() const; + public: typedef char * iterator; typedef const char * const_iterator; |