Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXString.h
1 /********************************************************************************
2 * *
3 * S t r i n g O b j e c t *
4 * *
5 *********************************************************************************
6 * Copyright (C) 1997,2017 by Jeroen van der Zijp. All Rights Reserved. *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU Lesser General Public License as published by *
10 * the Free Software Foundation; either version 3 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with this program. If not, see <http://www.gnu.org/licenses/> *
20 ********************************************************************************/
21 #ifndef FXSTRING_H
22 #define FXSTRING_H
23 
24 namespace FX {
25 
26 
27 class FXStream;
28 
29 
42 class FXAPI FXString {
43 private:
44  FXchar* str;
45 public:
46  static const FXchar null[];
47 public:
48  static const FXchar value2Digit[36];
49  static const FXschar digit2Value[256];
50 public:
51  static const FXschar utfBytes[256];
52 public:
53 
55  FXString();
56 
58  FXString(const FXString& s);
59 
61  FXString(const FXchar* s);
62 
64  FXString(const FXnchar* s);
65 
67  FXString(const FXwchar* s);
68 
70  FXString(const FXchar* s,FXint n);
71 
73  FXString(const FXnchar* s,FXint n);
74 
76  FXString(const FXwchar* s,FXint n);
77 
79  FXString(FXchar c,FXint n);
80 
82  FXint length() const { return *(((FXint*)str)-1); }
83 
85  void length(FXint len);
86 
88  FXwchar wc(FXint p) const;
89 
91  FXint inc(FXint p) const;
92 
94  FXint inc(FXint p,FXint n) const;
95 
97  FXint dec(FXint p) const;
98 
100  FXint dec(FXint p,FXint n) const;
101 
103  FXint extent(FXint p) const { return utfBytes[(FXuchar)str[p]]; }
104 
106  FXint count() const;
107 
109  FXint count(FXint start,FXint end) const;
110 
112  FXint offset(FXint indx) const;
113 
115  FXint index(FXint offs) const;
116 
118  FXint validate(FXint p) const;
119 
121  FXchar* text(){ return str; }
122  const FXchar* text() const { return str; }
123 
125  FXbool empty() const { return (((FXint*)str)[-1]==0); }
126 
128  FXbool operator!() const { return (((FXint*)str)[-1]==0); }
129 
131  FXchar& operator[](FXint i){ return str[i]; }
132 
134  const FXchar& operator[](FXint i) const { return str[i]; }
135 
137  FXchar& at(FXint i){ return str[i]; }
138 
140  const FXchar& at(FXint i) const { return str[i]; }
141 
143  FXchar& head(){ return str[0]; }
144 
146  const FXchar& head() const { return str[0]; }
147 
149  FXchar& tail(){ return str[length()-1]; }
150 
152  const FXchar& tail() const { return str[length()-1]; }
153 
155  FXString& operator=(const FXchar* s);
156 
158  FXString& operator=(const FXnchar* s);
159 
161  FXString& operator=(const FXwchar* s);
162 
164  FXString& operator=(const FXString& s);
165 
167  FXString& operator+=(FXchar c);
168 
170  FXString& operator+=(const FXchar* s);
171 
173  FXString& operator+=(const FXnchar* s);
174 
176  FXString& operator+=(const FXwchar* s);
177 
179  FXString& operator+=(const FXString& s);
180 
182  FXString& adopt(FXString& s);
183 
185  FXString& assign(FXchar c);
186 
188  FXString& assign(FXchar c,FXint n);
189 
191  FXString& assign(const FXchar *s,FXint n);
192 
194  FXString& assign(const FXnchar *s,FXint n);
195 
197  FXString& assign(const FXwchar *s,FXint n);
198 
200  FXString& assign(const FXchar* s);
201 
203  FXString& assign(const FXnchar* s);
204 
206  FXString& assign(const FXwchar* s);
207 
209  FXString& assign(const FXString& s);
210 
212  FXString& insert(FXint pos,FXchar c);
213 
215  FXString& insert(FXint pos,FXchar c,FXint n);
216 
218  FXString& insert(FXint pos,const FXchar* s,FXint n);
219 
221  FXString& insert(FXint pos,const FXnchar* s,FXint n);
222 
224  FXString& insert(FXint pos,const FXwchar* s,FXint n);
225 
227  FXString& insert(FXint pos,const FXchar* s);
228 
230  FXString& insert(FXint pos,const FXnchar* s);
231 
233  FXString& insert(FXint pos,const FXwchar* s);
234 
236  FXString& insert(FXint pos,const FXString& s);
237 
239  FXString& prepend(FXchar c);
240 
242  FXString& prepend(FXchar c,FXint n);
243 
245  FXString& prepend(const FXchar* s,FXint n);
246 
248  FXString& prepend(const FXnchar* s,FXint n);
249 
251  FXString& prepend(const FXwchar* s,FXint n);
252 
254  FXString& prepend(const FXchar* s);
255 
257  FXString& prepend(const FXnchar* s);
258 
260  FXString& prepend(const FXwchar* s);
261 
263  FXString& prepend(const FXString& s);
264 
266  FXString& append(FXchar c);
267 
269  FXString& append(FXchar c,FXint n);
270 
272  FXString& append(const FXchar* s,FXint n);
273 
275  FXString& append(const FXnchar* s,FXint n);
276 
278  FXString& append(const FXwchar* s,FXint n);
279 
281  FXString& append(const FXchar* s);
282 
284  FXString& append(const FXnchar* s);
285 
287  FXString& append(const FXwchar* s);
288 
290  FXString& append(const FXString& s);
291 
293  FXString& replace(FXint pos,FXchar c);
294 
296  FXString& replace(FXint pos,FXint r,FXchar c,FXint n);
297 
299  FXString& replace(FXint pos,FXint r,const FXchar* s,FXint n);
300 
302  FXString& replace(FXint pos,FXint r,const FXnchar* s,FXint n);
303 
305  FXString& replace(FXint pos,FXint r,const FXwchar* s,FXint n);
306 
308  FXString& replace(FXint pos,FXint r,const FXchar* s);
309 
311  FXString& replace(FXint pos,FXint r,const FXnchar* s);
312 
314  FXString& replace(FXint pos,FXint r,const FXwchar* s);
315 
317  FXString& replace(FXint pos,FXint r,const FXString& s);
318 
320  FXString& move(FXint dst,FXint src,FXint n);
321 
323  FXString& erase(FXint pos);
324 
326  FXString& erase(FXint pos,FXint n);
327 
329  FXString& trunc(FXint pos);
330 
332  FXString& clear();
333 
335  FXint contains(FXchar ch) const;
336 
338  FXint contains(const FXchar* sub,FXint n) const;
339 
341  FXint contains(const FXchar* sub) const;
342 
344  FXint contains(const FXString& sub) const;
345 
347  FXString& substitute(FXchar org,FXchar sub,FXbool all=true);
348 
350  FXString& substitute(const FXchar* org,FXint olen,const FXchar *rep,FXint rlen,FXbool all=true);
351 
353  FXString& substitute(const FXchar* org,const FXchar *rep,FXbool all=true);
354 
356  FXString& substitute(const FXString& org,const FXString& rep,FXbool all=true);
357 
359  FXString& lower();
360 
362  FXString& upper();
363 
365  FXString& simplify();
366 
368  FXString& trim();
369 
371  FXString& trimBegin();
372 
374  FXString& trimEnd();
375 
377  FXString left(FXint n) const;
378 
380  FXString right(FXint n) const;
381 
383  FXString mid(FXint pos,FXint n) const;
384 
386  FXString section(FXchar delim,FXint start,FXint num=1) const;
387 
389  FXString section(const FXchar* delim,FXint n,FXint start,FXint num) const;
390 
392  FXString section(const FXchar* delim,FXint start,FXint num=1) const;
393 
395  FXString section(const FXString& delim,FXint start,FXint num=1) const;
396 
403  FXString before(FXchar ch,FXint n=1) const;
404 
411  FXString rbefore(FXchar ch,FXint n=1) const;
412 
419  FXString after(FXchar ch,FXint n=1) const;
420 
427  FXString rafter(FXchar ch,FXint n=1) const;
428 
430  FXint find(FXchar c,FXint pos=0) const;
431 
433  FXint rfind(FXchar c,FXint pos=2147483647) const;
434 
436  FXint find(FXchar c,FXint pos,FXint n) const;
437 
439  FXint rfind(FXchar c,FXint pos,FXint n) const;
440 
442  FXint find(const FXchar* substr,FXint n,FXint pos) const;
443 
445  FXint rfind(const FXchar* substr,FXint n,FXint pos) const;
446 
448  FXint find(const FXchar* substr,FXint pos=0) const;
449 
451  FXint rfind(const FXchar* substr,FXint pos=2147483647) const;
452 
454  FXint find(const FXString& substr,FXint pos=0) const;
455 
457  FXint rfind(const FXString& substr,FXint pos=2147483647) const;
458 
460  FXint find_first_of(const FXchar* set,FXint n,FXint pos) const;
461 
463  FXint find_first_of(const FXchar* set,FXint pos=0) const;
464 
466  FXint find_first_of(const FXString& set,FXint pos=0) const;
467 
469  FXint find_first_of(FXchar c,FXint pos=0) const;
470 
472  FXint find_last_of(const FXchar* set,FXint n,FXint pos) const;
473 
475  FXint find_last_of(const FXchar* set,FXint pos=2147483647) const;
476 
478  FXint find_last_of(const FXString& set,FXint pos=2147483647) const;
479 
481  FXint find_last_of(FXchar c,FXint pos=0) const;
482 
484  FXint find_first_not_of(const FXchar* set,FXint n,FXint pos) const;
485 
487  FXint find_first_not_of(const FXchar* set,FXint pos=0) const;
488 
490  FXint find_first_not_of(const FXString& set,FXint pos=0) const;
491 
493  FXint find_first_not_of(FXchar c,FXint pos=0) const;
494 
496  FXint find_last_not_of(const FXchar* set,FXint n,FXint pos) const;
497 
499  FXint find_last_not_of(const FXchar* set,FXint pos=2147483647) const;
500 
502  FXint find_last_not_of(const FXString& set,FXint pos=2147483647) const;
503 
505  FXint find_last_not_of(FXchar c,FXint pos=0) const;
506 
508  FXint scan(const FXchar* fmt,...) const FX_SCANF(2,3) ;
509  FXint vscan(const FXchar* fmt,va_list args) const;
510 
512  FXint format(const FXchar* fmt,...) FX_PRINTF(2,3) ;
513  FXint vformat(const FXchar* fmt,va_list args);
514 
516  FXint toInt(FXint base=10,FXbool* ok=NULL) const;
517 
519  FXuint toUInt(FXint base=10,FXbool* ok=NULL) const;
520 
522  FXlong toLong(FXint base=10,FXbool* ok=NULL) const;
523 
525  FXulong toULong(FXint base=10,FXbool* ok=NULL) const;
526 
528  FXfloat toFloat(FXbool* ok=NULL) const;
529 
531  FXdouble toDouble(FXbool* ok=NULL) const;
532 
534  FXString& fromInt(FXint number,FXint base=10);
535 
537  FXString& fromUInt(FXuint number,FXint base=10);
538 
540  FXString& fromLong(FXlong number,FXint base=10);
541 
543  FXString& fromULong(FXulong number,FXint base=10);
544 
546  FXString& fromFloat(FXfloat number,FXint prec=6,FXint fmt=2);
547 
549  FXString& fromDouble(FXdouble number,FXint prec=6,FXint fmt=2);
550 
555  static FXString value(FXint num,FXint base=10);
556  static FXString value(FXuint num,FXint base=10);
557 
562  static FXString value(FXlong num,FXint base=10);
563  static FXString value(FXulong num,FXint base=10);
564 
570  static FXString value(FXfloat num,FXint prec=6,FXint fmt=2);
571  static FXString value(FXdouble num,FXint prec=6,FXint fmt=2);
572 
576  static FXString value(const FXchar* fmt,...) FX_PRINTF(1,2) ;
577 
581  static FXString vvalue(const FXchar* fmt,va_list args);
582 
584  FXuint hash() const;
585 
587  static FXuint hash(const FXchar* s);
588 
590  friend inline FXString& swap(FXString& dst,FXString& src);
591 
593  friend FXAPI FXStream& operator<<(FXStream& store,const FXString& s);
594 
596  friend FXAPI FXStream& operator>>(FXStream& store,FXString& s);
597 
599  ~FXString();
600  };
601 
602 
604 inline FXString& swap(FXString& dst,FXString& src){
605  FXchar* t=dst.str; dst.str=src.str; src.str=t;
606  return dst;
607  }
608 
609 
611 extern FXAPI FXint compare(const FXchar* s1,const FXchar* s2);
612 extern FXAPI FXint compare(const FXchar* s1,const FXString& s2);
613 extern FXAPI FXint compare(const FXString& s1,const FXchar* s2);
614 extern FXAPI FXint compare(const FXString& s1,const FXString& s2);
615 
617 extern FXAPI FXint compare(const FXchar* s1,const FXchar* s2,FXint n);
618 extern FXAPI FXint compare(const FXchar* s1,const FXString& s2,FXint n);
619 extern FXAPI FXint compare(const FXString& s1,const FXchar* s2,FXint n);
620 extern FXAPI FXint compare(const FXString& s1,const FXString& s2,FXint n);
621 
623 extern FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2);
624 extern FXAPI FXint comparecase(const FXchar* s1,const FXString& s2);
625 extern FXAPI FXint comparecase(const FXString& s1,const FXchar* s2);
626 extern FXAPI FXint comparecase(const FXString& s1,const FXString& s2);
627 
629 extern FXAPI FXint comparecase(const FXchar* s1,const FXchar* s2,FXint n);
630 extern FXAPI FXint comparecase(const FXchar* s1,const FXString& s2,FXint n);
631 extern FXAPI FXint comparecase(const FXString& s1,const FXchar* s2,FXint n);
632 extern FXAPI FXint comparecase(const FXString& s1,const FXString& s2,FXint n);
633 
635 extern FXAPI FXint compareversion(const FXchar* s1,const FXchar* s2);
636 extern FXAPI FXint compareversion(const FXchar* s1,const FXString& s2);
637 extern FXAPI FXint compareversion(const FXString& s1,const FXchar* s2);
638 extern FXAPI FXint compareversion(const FXString& s1,const FXString& s2);
639 
641 extern FXAPI FXint compareversioncase(const FXchar* s1,const FXchar* s2);
642 extern FXAPI FXint compareversioncase(const FXchar* s1,const FXString& s2);
643 extern FXAPI FXint compareversioncase(const FXString& s1,const FXchar* s2);
644 extern FXAPI FXint compareversioncase(const FXString& s1,const FXString& s2);
645 
647 extern FXAPI FXbool operator==(const FXString& s1,const FXString& s2);
648 extern FXAPI FXbool operator==(const FXString& s1,const FXchar* s2);
649 extern FXAPI FXbool operator==(const FXchar* s1,const FXString& s2);
650 
652 extern FXAPI FXbool operator!=(const FXString& s1,const FXString& s2);
653 extern FXAPI FXbool operator!=(const FXString& s1,const FXchar* s2);
654 extern FXAPI FXbool operator!=(const FXchar* s1,const FXString& s2);
655 
657 extern FXAPI FXbool operator<(const FXString& s1,const FXString& s2);
658 extern FXAPI FXbool operator<(const FXString& s1,const FXchar* s2);
659 extern FXAPI FXbool operator<(const FXchar* s1,const FXString& s2);
660 
662 extern FXAPI FXbool operator<=(const FXString& s1,const FXString& s2);
663 extern FXAPI FXbool operator<=(const FXString& s1,const FXchar* s2);
664 extern FXAPI FXbool operator<=(const FXchar* s1,const FXString& s2);
665 
667 extern FXAPI FXbool operator>(const FXString& s1,const FXString& s2);
668 extern FXAPI FXbool operator>(const FXString& s1,const FXchar* s2);
669 extern FXAPI FXbool operator>(const FXchar* s1,const FXString& s2);
670 
672 extern FXAPI FXbool operator>=(const FXString& s1,const FXString& s2);
673 extern FXAPI FXbool operator>=(const FXString& s1,const FXchar* s2);
674 extern FXAPI FXbool operator>=(const FXchar* s1,const FXString& s2);
675 
677 extern FXAPI FXString operator+(const FXString& s1,const FXString& s2);
678 
680 extern FXAPI FXString operator+(const FXString& s1,const FXchar* s2);
681 extern FXAPI FXString operator+(const FXString& s1,const FXnchar* s2);
682 extern FXAPI FXString operator+(const FXString& s1,const FXwchar* s2);
683 
685 extern FXAPI FXString operator+(const FXchar* s1,const FXString& s2);
686 extern FXAPI FXString operator+(const FXnchar* s1,const FXString& s2);
687 extern FXAPI FXString operator+(const FXwchar* s1,const FXString& s2);
688 
690 extern FXAPI FXString operator+(const FXString& s,FXchar c);
691 extern FXAPI FXString operator+(FXchar c,const FXString& s);
692 
694 extern FXAPI FXStream& operator<<(FXStream& store,const FXString& s);
695 
697 extern FXAPI FXStream& operator>>(FXStream& store,FXString& s);
698 
700 extern FXAPI FXString& unixToDos(FXString& str);
701 
703 extern FXAPI FXString& dosToUnix(FXString& str);
704 
709 extern FXAPI FXbool shouldEscape(const FXString& str,FXchar lquote=0,FXchar rquote=0,FXint flag=0);
710 
720 extern FXAPI FXString escape(const FXString& str,FXchar lquote=0,FXchar rquote=0,FXint flag=0);
721 
729 extern FXAPI FXString unescape(const FXString& str,FXchar lquote=0,FXchar rquote=0);
730 
732 extern FXAPI FXString normalize(const FXString& s);
733 
735 extern FXAPI FXString decompose(const FXString& s,FXbool canonical=true);
736 
738 extern FXAPI FXString compose(const FXString& s,FXbool canonical=true);
739 
740 }
741 
742 #endif

Copyright © 1997-2016 Jeroen van der Zijp