18#ifndef __BASICSTRING_H__
19#define __BASICSTRING_H__
30#define READBUFSTR "128"
32#ifdef __PREFIX_STRING__
33#define String BasicString
41 void NewString(
int startsize);
49 static bool caseSensitive;
51 explicit String(
int startsize = 0)
57 explicit String(
char ch,
int count = 1);
73 String & Copy(
const char * s);
86 String & LeftClip(
int clipAmount);
87 String & RightClip(
int clipAmount);
89 String & operator = (
char ch);
90 String operator + (
char ch)
const;
91 String & operator += (
char ch);
97 String & operator = (
const char * rhs);
98 String operator + (
const char * rhs)
const;
99 String & operator += (
const char * rhs);
101 String & operator = (
int rhs);
102 String operator + (
int rhs)
const;
103 String & operator += (
int rhs);
105 String & operator = (
double rhs);
106 String operator + (
double rhs)
const;
107 String & operator += (
double rhs);
109 void appendFullFloat(
float rhs);
111 String & operator = (
unsigned int rhs);
112 String operator + (
unsigned int rhs)
const;
113 String & operator += (
unsigned int rhs);
114 String operator *(
unsigned int rhs)
const;
115 String & operator *= (
unsigned int rhs);
117 int Compare(
const String & rhs)
const;
118 int FastCompare(
const String & rhs)
const;
119 int SlowCompare(
const String & rhs)
const;
121 int Compare(
const char * rhs)
const;
122 int FastCompare(
const char * rhs)
const;
123 int SlowCompare(
const char * rhs)
const;
125 int CompareToStem(
const String & stem)
const;
126 int FastCompareToStem(
const String & stem)
const;
127 int SlowCompareToStem(
const String & stem)
const;
129 int CompareToStem(
const char * stem)
const;
130 int FastCompareToStem(
const char * stem)
const;
131 int SlowCompareToStem(
const char * stem)
const;
133 int MatchesBeginningOf(
const String & stem)
const;
134 int FastMatchesBeginningOf(
const String & stem)
const;
135 int SlowMatchesBeginningOf(
const String & stem)
const;
137 int MatchesBeginningOf(
const char * stem)
const;
138 int FastMatchesBeginningOf(
const char * stem)
const;
139 int SlowMatchesBeginningOf(
const char * stem)
const;
141 int operator == (
const String & rhs)
const
143 return Compare(rhs) == 0;
145 int operator != (
const String & rhs)
const
147 return Compare(rhs) != 0;
149 int operator < (
const String & rhs)
const
151 return Compare(rhs) < 0;
153 int operator > (
const String & rhs)
const
155 return Compare(rhs) > 0;
157 int operator >= (
const String & rhs)
const
159 return Compare(rhs) >= 0;
161 int operator <= (
const String & rhs)
const
163 return Compare(rhs) <= 0;
166 int operator == (
const char * rhs)
const
168 return Compare(rhs) == 0;
170 int operator != (
const char * rhs)
const
172 return Compare(rhs) != 0;
174 int operator < (
const char * rhs)
const
176 return Compare(rhs) < 0;
178 int operator > (
const char * rhs)
const
180 return Compare(rhs) > 0;
182 int operator <= (
const char * rhs)
const
184 return Compare(rhs) <= 0;
186 int operator >= (
const char * rhs)
const
188 return Compare(rhs) >= 0;
191 operator const char *()
const
195 const char *c_str()
const
197 return (
const char *) buffer;
204 operator int ()
const
208 operator double()
const
212 operator long double()
const;
214 char operator [](
int i)
const
218 char & operator [](
int i)
225 return buffer[len - 1];
232 void Grow(
int newSize);
235 char * LockBuffer(
int size = -1);
246 int ReadLine(FILE * f);
247 void WriteLine(FILE * f);
248 void Write(FILE * f);
254 int ReadLine(
IFILE & f);
256 String Left(
int count)
const;
257 String Right(
int count)
const;
258 String Mid(
int start,
int end)
const;
259 String SubStr(
int start,
int count)
const;
260 String SubStr(
int start)
const;
262 int FindChar(
char ch,
int start = 0)
const;
263 int FastFindChar(
char ch,
int start = 0)
const;
264 int SlowFindChar(
char ch,
int start = 0)
const;
266 int FindLastChar(
char ch)
const;
267 int FastFindLastChar(
char ch)
const;
268 int SlowFindLastChar(
char ch)
const;
273 int Find(
char ch,
int start = 0)
const
275 return(FindChar(ch, start));
277 int Find(
const String & str,
int start = 0)
const;
278 int FastFind(
const String & str,
int start = 0)
const;
279 int SlowFind(
const String & str,
int start = 0)
const;
282 String & Filter(
const char * s);
285 String & ExcludeCharacters(
const char * s);
291 int BufferSize()
const
296 int SetLength(
int newlen);
297 int Dimension(
int newlen)
299 return SetLength(newlen);
316 String & Trim(
char character);
317 vector<String> *Split(
char splitChar);
319 long AsInteger()
const;
320 bool AsInteger(
long& intValue)
const;
321 bool AsInteger(
int& intValue)
const;
322 double AsDouble()
const
324 return (
double) *
this;
326 long double AsLongDouble()
const
328 return (
long double) *
this;
331 int printf(
const char * format, ...);
332 int vprintf(
const char * format, va_list arglist);
334 int catprintf(
const char * format, ...);
335 int vcatprintf(
const char * format, va_list arglist);
340 static int my_snprintf(
char * buffer,
int bufsize,
const char * format, ...);
341 static int my_vsnprintf(
char * buffer,
int bufsize,
const char * format, va_list args);
342 static void my_vsnprintf_close_file();
343 static void check_vsnprintf();
349 const unsigned char * uchar()
const
351 return (
unsigned char *) buffer;
353 const signed char * schar()
const
355 return (
signed char *) buffer;
358 static FILE * my_vsnprintf_file;
361 void Fill(
char ch,
int length = -1);
365 static int vsnprintfChecked;
370 return s1.Compare(s2);
373inline int Compare(
const String & s1,
const char * s2)
375 return s1.Compare(s2);
378inline int Compare(
const char * s1,
const String & s2)
380 return -s2.Compare(s1);
383inline int FastCompare(
const String & s1,
const String & s2)
385 return s1.FastCompare(s2);
388inline int FastCompare(
const String & s1,
const char * s2)
390 return s1.FastCompare(s2);
393inline int FastCompare(
const char * s1,
const String & s2)
395 return -s2.FastCompare(s1);
398inline int SlowCompare(
const String & s1,
const String & s2)
400 return s1.SlowCompare(s2);
403inline int SlowCompare(
const String & s1,
const char * s2)
405 return s1.SlowCompare(s2);
408inline int SlowCompare(
const char * s1,
const String & s2)
410 return -s2.SlowCompare(s1);
414String operator + (
const char * lhs,
const String & rhs);
416String operator + (
unsigned int lhs,
const String & rhs);
418std::ostream& operator << (std::ostream& os,
const String& s);
425 unsigned int numExpected = str.Length();
426 unsigned int numWritten =
427 stream.
ifwrite(str.c_str(), numExpected);
428 if(numExpected != numWritten)
430 std::cerr <<
"Failed to stream to IFILE, expected "
431 << numExpected <<
" but only wrote "
432 << numWritten << std::endl;