diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /3dc/win95/STRING.CPP | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to '3dc/win95/STRING.CPP')
| -rw-r--r-- | 3dc/win95/STRING.CPP | 305 |
1 files changed, 0 insertions, 305 deletions
diff --git a/3dc/win95/STRING.CPP b/3dc/win95/STRING.CPP deleted file mode 100644 index 4ea96b5..0000000 --- a/3dc/win95/STRING.CPP +++ /dev/null @@ -1,305 +0,0 @@ -#include <string.h> -#include <ctype.h> -#include <malloc.h> -#include "string.hpp" - -String::String() -: rep(0) -, len(0) -, cstring(0) -{ -} - -String::String(char const * str, size_t maxlen) -: rep(0) -, len(strlen(str)) -, cstring(0) -{ - if (len > maxlen) len = maxlen; - if (!len) return; - rep = (char *)malloc(len*sizeof(char)); - memcpy(rep,str,len*sizeof(char)); -} - -String::String(String const & str, size_t start, size_t leng) -: rep(0) -, len(leng) -, cstring(0) -{ - if (start>str.len) return; - if (start+len>str.len) len=str.len-start; - if (!len) return; - rep = (char *)malloc(len*sizeof(char)); - memcpy(rep,&str.rep[start],len*sizeof(char)); -} - -String::String(char c, size_t n) -: rep(0) -, len(n) -, cstring(0) -{ - if (len) - { - rep = (char *)malloc(len*sizeof(char)); - for (size_t p=0; p<len; ++p) - rep[p]=c; - } -} - -String::~String() -{ - if (cstring) free(cstring); - if (rep) free(rep); -} - -char const * String::c_str() const -{ - if (!len) return ""; - if (cstring) - { - if (strlen(cstring)==len && !strncmp(cstring,rep,len)) - return cstring; - free(cstring); - } - char * newcstr = (char *)malloc(len+1); - memcpy(newcstr,rep,len*sizeof(char)); - newcstr[len]=0; - *(char * *)&cstring = newcstr; - return newcstr; -} - -#if 0 -String::operator char () const -{ - return len ? rep[0] : 0; -} -#endif - -String & String::operator = (String const & str) -{ - if (&str != this) - { - if (rep) free(rep); - rep = 0; - len = str.len; - if (len) - { - rep = (char *)malloc(len*sizeof(char)); - memcpy(rep,str.rep,len*sizeof(char)); - } - } - return *this; -} - -String & String::operator = (char const * str) -{ - if (rep) free(rep); - rep = 0; - len = strlen(str); - if (len) - { - rep = (char *)malloc(len*sizeof(char)); - memcpy(rep,str,len*sizeof(char)); - } - return *this; -} - -String & String::operator += (String const & str) -{ - if (&str != this) - { - if (str.len) - { - rep = (char *)realloc(rep,(len+str.len)*sizeof(char)); - memcpy(&rep[len],str.rep,str.len*sizeof(char)); - len += str.len; - } - } - else if (len) - { - rep = (char *)realloc(rep,len*2*sizeof(char)); - memcpy(&rep[len],rep,len*sizeof(char)); - len *= 2; - } - return *this; -} - -String & String::operator += (char const * str) -{ - size_t clen = strlen(str); - if (clen) - { - rep = (char *)realloc(rep,(len+clen)*sizeof(char)); - memcpy(&rep[len],str,clen*sizeof(char)); - len += clen; - } - return *this; -} - -#define STRING_COMPARES(op) \ -int operator op (String const & str1, String const & str2) \ -{ \ - return strcmp(str1.c_str(),str2.c_str()) op 0; \ -} \ -int operator op (String const & str1, char const * str2) \ -{ \ - return strcmp(str1.c_str(),str2) op 0; \ -} \ -int operator op (char const * str1, String const & str2) \ -{ \ - return strcmp(str1,str2.c_str()) op 0; \ -} \ -int operator op (String const & str1, char c) \ -{ \ - char buf[] = { c, 0 }; \ - return strcmp(str1.c_str(),buf) op 0; \ -} \ -int operator op (char c, String const & str2) \ -{ \ - char buf[] = { c, 0 }; \ - return strcmp(buf,str2.c_str()) op 0; \ -} -STRING_COMPARES(==) -STRING_COMPARES(!=) -STRING_COMPARES(<=) -STRING_COMPARES(>=) -STRING_COMPARES(<) -STRING_COMPARES(>) - -void String::put_at(size_t pos, char c) -{ - if (pos<len) - rep[pos]=c; - else - operator += (c); -} - -int String::match(String const & str) const -{ - for (size_t pos = 0; pos<len || pos<str.len; ++pos) - { - if (pos>=len || pos>=str.len || rep[pos] != str.rep[pos]) return (int)pos; - } - return -1; -} - -int String::match(char const * str) const -{ - for (size_t pos = 0; pos<len || *str; ++pos, ++str) - { - if (pos>=len || !*str || rep[pos] != *str) return (int)pos; - } - return -1; -} - -int String::index(String const & str, size_t pos) const -{ - if (!str.len) return (int)pos; - for (size_t spos = 0, rpos = pos; pos<len; ++pos) - { - if (rep[pos]==str.rep[spos]) - { - if (!spos) rpos = pos; - ++spos; - if (spos >= str.len) return (int)rpos; - } - else spos = 0; - } - return -1; -} - -int String::index(char const * str, size_t pos) const -{ - if (!*str) return (int)pos; - char const * strP = str; - for (size_t rpos = pos; pos<len; ++pos) - { - if (rep[pos]==*strP) - { - if (strP==str) rpos = pos; - ++strP; - if (!*strP) return (int)rpos; - } - else strP = str; - } - return -1; -} - -String String::upper() const -{ - String rstr(*this); - for (size_t pos=0; pos<rstr.len; ++pos) - { - rstr.rep[pos] = (char)toupper(rstr.rep[pos]); - } - return rstr; -} - -String String::lower() const -{ - String rstr(*this); - for (size_t pos=0; pos<rstr.len; ++pos) - { - rstr.rep[pos] = (char)tolower(rstr.rep[pos]); - } - return rstr; -} - -String::String(String const & str1, String const & str2) -: rep(0) -, len(str1.len + str2.len) -, cstring(0) -{ - if (!len) return; - rep = (char *)malloc(len*sizeof(char)); - if (str1.len) memcpy(rep,str1.rep,str1.len*sizeof(char)); - if (str2.len) memcpy(&rep[str1.len],str2.rep,str2.len*sizeof(char)); -} - -String::String(char const * str1, String const & str2) -: rep(0) -, cstring(0) -{ - size_t clen = strlen(str1); - len = clen + str2.len; - if (!len) return; - rep = (char *)malloc(len*sizeof(char)); - if (clen) memcpy(rep,str1,clen*sizeof(char)); - if (str2.len) memcpy(&rep[clen],str2.rep,str2.len*sizeof(char)); -} - -String::String(String const & str1, char const * str2) -: rep(0) -, cstring(0) -{ - size_t clen = strlen(str2); - len = str1.len + clen; - if (!len) return; - rep = (char *)malloc(len*sizeof(char)); - if (str1.len) memcpy(rep,str1.rep,str1.len*sizeof(char)); - if (clen) memcpy(&rep[str1.len],str2,clen*sizeof(char)); -} - -String::String(char c, String const & str2) -: rep(0) -, len(1 + str2.len) -, cstring(0) -{ - rep = (char *)malloc(len*sizeof(char)); - rep[0]=c; - if (str2.len) memcpy(&rep[1],str2.rep,str2.len*sizeof(char)); -} - -String::String(String const & str1, char c) -: rep(0) -, len(str1.len + 1) -, cstring(0) -{ - rep = (char *)malloc(len*sizeof(char)); - if (str1.len) memcpy(rep,str1.rep,str1.len*sizeof(char)); - rep[str1.len]=c; -} - - - - |
