21
20
* it under the terms of the GNU General Public License as published by
22
21
* the Free Software Foundation; either version 2 of the License, or
23
22
* (at your option) any later version.
25
24
* This program is distributed in the hope that it will be useful,
26
25
* but WITHOUT ANY WARRANTY; without even the implied warranty of
27
26
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28
27
* GNU General Public License for more details.
30
29
* You should have received a copy of the GNU General Public License
31
30
* along with this program; if not, write to the Free Software
32
31
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
39
#include <stdint.h> //for INT_MAX
40
#else /* HAVE_STDINT_H */
42
#define INT_MAX 1<<31 //hack but a safe bet
44
#endif /* HAVE_STDINT_H */
39
47
String::String() : size_(0), len_(0), buf_ (NULL)
47
55
String::size() const
59
String::pos(char const *aString) const
61
return strstr(buf(), aString);
65
String::pos(char const ch) const
67
return strchr(buf(), ch);
71
String::rpos(char const ch) const
73
return strrchr(buf(), (ch));
60
bool String::defined() const
65
bool String::undefined() const
71
String::rawBuf() const
77
String::termedBuf() const
83
String::operator [](unsigned int aPos) const
77
92
String::cmp (char const *aString) const
87
102
if (aString == NULL || aString[0] == '\0')
90
return strcmp(buf(), aString);
105
return strcmp(termedBuf(), aString);
94
String::cmp (char const *aString, size_t count) const
109
String::cmp (char const *aString, String::size_type count) const
96
111
/* always the same at length 0 */
107
122
if (aString == NULL || aString[0] == '\0')
110
return strncmp(buf(), aString, count);
125
return strncmp(termedBuf(), aString, count);
124
139
if (aString.size() == 0)
127
return strcmp(buf(), aString.buf());
142
return strcmp(termedBuf(), aString.termedBuf());
131
146
String::caseCmp(char const *aString) const
133
return strcasecmp(buf(), aString);
137
String::caseCmp(char const *aString, size_t count) const
139
return strncasecmp(buf(), aString, count);
148
return strcasecmp(termedBuf(), aString);
152
String::caseCmp(char const *aString, String::size_type count) const
154
return strncasecmp(termedBuf(), aString, count);
158
String::caseCmp(const String &str) const
160
return caseCmp(str.rawBuf(),str.size());
143
165
String::set(char const *loc, char const ch)
145
if(loc < buf_ || loc > (buf_ + size_) ) return;
167
if (loc < buf_ || loc > (buf_ + size_) ) return;
147
169
buf_[loc-buf_] = ch;
151
String::cut(size_t newLength)
173
String::cut(String::size_type newLength)
153
if(newLength < 0 || newLength > len_) return;
175
if (newLength < 0 || newLength > len_) return;
155
177
len_ = newLength;
157
if(len_ == 0 && buf_ == NULL) return; // buf_ may be NULL on zero-length strings.
179
// buf_ may be NULL on zero-length strings.
180
if (len_ == 0 && buf_ == NULL) return;
158
182
buf_[newLength] = '\0';
162
186
String::cutPointer(char const *loc)
164
if(loc < buf_ || loc > (buf_ + size_) ) return;
188
if (loc < buf_ || loc > (buf_ + size_) ) return;
167
191
buf_[len_] = '\0';