BALL 1.5.0
string.h
Go to the documentation of this file.
1// -*- Mode: C++; tab-width: 2; -*-
2// vi: set ts=2:
3//
4
5#ifndef BALL_DATATYPE_STRING_H
6#define BALL_DATATYPE_STRING_H
7
8#ifndef BALL_CONFIG_CONFIG_H
9# include <BALL/CONFIG/config.h>
10#endif
11#ifndef BALL_COMMON_GLOBAL_H
12# include <BALL/COMMON/global.h>
13#endif
14#ifndef BALL_COMMON_CREATE_H
15# include <BALL/COMMON/create.h>
16#endif
17#ifndef BALL_COMMON_MACROS_H
18# include <BALL/COMMON/macros.h>
19#endif
20#ifndef BALL_COMMON_EXCEPTION_H
22#endif
23#ifndef BALL_COMMON_DEBUG_H
24# include <BALL/COMMON/debug.h>
25#endif
26
27#include <string>
28#include <cctype>
29#include <cerrno>
30#include <cstdlib>
31#include <cstring>
32#include <iostream>
33#include <sstream>
34#include <vector>
35
36using std::string;
37
38class QString;
39class QByteArray;
40
41namespace BALL
42{
43 // forward declaration
44 class Substring;
45
52
57 {
59 friend class Substring;
60
61 public:
62
63 // String has no copy constructor taking String&, bool as arguments.
64 // the compiler would confuse it with another copy constructor,
65 // cast true to 1 and copy only the string from the second character
66 // on! We could use BALL_CREATE_NODEEP, but this leads to trouble with
67 // inline constructors, so we code it by hand (here and in string.C)
68 virtual void* create(bool /* deep */ = true, bool empty = false) const;
69
72
81 {
83 CASE_SENSITIVE = 0,
84
86 CASE_INSENSITIVE = 1
87 };
88
94 static const Size EndPos;
95
98 static const size_t npos = -1;
99
101
107
110
113
116
119
122
125
137 static const char* CHARACTER_CLASS__WHITESPACE;
138
141 static const char* CHARACTER_CLASS__QUOTES;
142
144
147
150
152 String(const string& string);
153
155 String(const String& s);
156
159
161 String(string&& s);
162
165
167 String& operator=(string&& s);
168
170 explicit String(const QString& string);
171
173 explicit String(const QByteArray& string);
174
180 String(const String& s, Index from, Size len = EndPos);
181
191 String(const char* char_ptr, Index from = 0, Size len = EndPos);
192
203 String(Size buffer_size, const char* format, ... );
204
210 String(std::stringstream& s);
211
214 String(const char c, Size len = 1);
215
217 String(const unsigned char uc);
218
220 String(short s);
221
223 String(unsigned short us);
224
226 String(int i);
227
229 String(unsigned int ui);
230
232 String(long l);
233
235 String(unsigned long);
236
237#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
239 String(LongIndex l);
240
243#endif
244
246 String(float f);
247
249 String(double d);
250
252 operator string&();
253
255 operator string const&() const;
256
258 virtual ~String();
259
261 void destroy();
262
264
268
270 void set(const String& s);
271
276 void set(const String& string, Index from, Size len = EndPos);
277
283 void set(const char* char_ptr, Index from = 0, Size len = EndPos);
284
289 void set(Size buffer_size, const char *format, ...);
290
294 void set(std::stringstream& s);
295
297 void set(char c, Size len = 1);
298
300 void set(unsigned char uc);
301
303 void set(short s);
304
306 void set(unsigned short us);
307
309 void set(int i);
310
312 void set(unsigned int ui);
313
315 void set(long l);
316
318 void set(unsigned long ul);
319
320#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
322 void set(LongIndex l);
323
325 void set(LongSize ul);
326#endif
327
329 void set(float f);
330
332 void set(double d);
333
343 void get(char* char_ptr, Index from = 0, Size len = EndPos) const;
344
346 const String& operator = (const String& s);
347
351 const String& operator = (const char* pc);
352
356 const String& operator = (std::stringstream& s);
357
359 const String& operator = (char c);
360
362 const String& operator = (unsigned char uc);
363
365 const String& operator = (short s);
366
368 const String& operator = (unsigned short us);
369
371 const String& operator = (int i);
372
374 const String& operator = (unsigned int ui);
375
377 const String& operator = (long l);
378
380 const String& operator = (unsigned long ul);
381
382#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
384 const String& operator = (LongIndex l);
385
387 const String& operator = (LongSize ul);
388#endif
389
391 const String& operator = (float f);
392
394 const String& operator = (double d);
396
404 static void setCompareMode(CompareMode compare_mode);
405
409
413
418 bool toBool() const;
419
421 char toChar() const;
422
424 unsigned char toUnsignedChar() const;
425
429 short toShort() const;
430
434 unsigned short toUnsignedShort() const;
435
439 int toInt() const;
440
444 unsigned int toUnsignedInt() const;
445
449 long toLong() const;
450
454 unsigned long toUnsignedLong() const;
455
459 float toFloat() const;
460
464 double toDouble() const;
466
467
471
476 void toLower(Index from = 0, Size len = EndPos);
477
482 void toUpper(Index from = 0, Size len = EndPos);
483
485
488
493 Substring getSubstring(Index from = 0, Size len = EndPos) const;
494
499 Substring operator () (Index from, Size len = EndPos) const;
500
503 Substring before(const String& s, Index from = 0) const;
504
507 Substring through(const String& s, Index from = 0) const;
508
511 Substring from(const String& s, Index from = 0) const;
512
515 Substring after(const String& s, Index from = 0) const;
516
518
521
525 Size countFields(const char* delimiters = CHARACTER_CLASS__WHITESPACE) const;
526
530 Size countFieldsQuoted(const char* delimiters = CHARACTER_CLASS__WHITESPACE,
531 const char* quotes = CHARACTER_CLASS__QUOTES) const;
532
537 String getField(Index index, const char* delimiters = CHARACTER_CLASS__WHITESPACE, Index* from = 0) const;
538
543 String getFieldQuoted(Index index, const char* delimiters = CHARACTER_CLASS__WHITESPACE,
544 const char* quotes = CHARACTER_CLASS__QUOTES, Index* from = 0) const;
545
550 Size split(String string_array[], Size array_size, const char* delimiters = CHARACTER_CLASS__WHITESPACE, Index from = 0) const;
551
557 Size split(std::vector<String>& strings, const char* delimiters = CHARACTER_CLASS__WHITESPACE, Index from = 0) const;
558
566 Size splitQuoted(std::vector<String>& strings, const char* delimiters = CHARACTER_CLASS__WHITESPACE,
567 const char* quotes = CHARACTER_CLASS__QUOTES, Index from = 0) const;
568
570
573
580 String& trimLeft(const char* trimmed = CHARACTER_CLASS__WHITESPACE);
581
588 String& trimRight(const char* trimmed = CHARACTER_CLASS__WHITESPACE);
589
593 String& trim(const char* trimmed = CHARACTER_CLASS__WHITESPACE);
594
595 // ?????
599 String trim(const char* trimmed = CHARACTER_CLASS__WHITESPACE) const;
600
603
605 Substring left(Size len) const;
606
608 Substring right(Size len) const;
609
618 Substring instr(const String& pattern, Index from = 0) const;
619
621
624
625 // NOTE: please, please, pretty please, only try to optimize away operator+ definitions
626 // if you *really* know what you are doing. We didn't, and we definitely don't want
627 // to touch this stinking heap of C++ garbage ever again!
628 // (dstoeckel & anhi)
631 friend String operator + (const String& s1, const string& s2);
632
635 friend String operator + (const string& s1, const String& s2);
636
639 friend String operator + (const String& s1, const String& s2);
640
643 friend String operator + (const String& s1, const char* char_ptr);
644
647 friend String operator + (const char* char_ptr, const String& s);
648
651 friend String operator + (const String& s, char c);
652
655 friend String operator + (char c, const String& s);
656
659 friend String operator + (String&& s1, const string& s2);
660
663 friend String operator + (String&& s1, const String& s2);
664
667 friend String operator + (String&& s1, String&& s2);
668
670 friend String operator + (const String& s1, string&& s2);
671
673 friend String operator + (string&& s1, const String& s2);
674
676 friend String operator + (const string& s1, String&& s2);
677
680 friend String operator + (const String& s1, String&& s2);
681
684 friend String operator + (String&& s1, const char* char_ptr);
685
688 friend String operator + (const char* char_ptr, String&& s);
689
692 friend String operator + (String&& s, char c);
693
696 friend String operator + (char c, String&& s);
697
699 void swap(String& s);
700
710 String& reverse(Index from = 0, Size len = EndPos);
711
715 Size substitute(const String& to_replace, const String& replacing);
716
718 void substituteAll(const String& to_replace, const String& replacing);
719
721
725
727 bool has(char c) const;
728
730 bool hasSubstring(const String& s, Index from = 0) const;
731
733 bool hasPrefix(const String& s) const;
734
736 bool hasSuffix(const String& s) const;
737
739 bool isEmpty() const;
740
744 bool isAlpha() const;
745
749 bool isAlnum() const;
750
754 bool isDigit() const;
755
760 bool isFloat() const;
761
765 bool isSpace() const;
766
771 bool isWhitespace() const;
772
774 static bool isAlpha(char c);
775
777 static bool isAlnum(char c);
778
780 static bool isDigit(char c);
781
783 static bool isSpace(char c);
784
788 static bool isWhitespace(char c);
789
791
794
797
802
804
807
812 int compare(const String& string, Index from = 0) const;
813
818 int compare(const String& string, Index from, Size len) const;
819
820
826 int compare(const char* char_ptr, Index from = 0) const;
827
833 int compare(const char* char_ptr, Index from, Size len) const;
834
839 int compare(char c, Index from = 0) const;
840
844 friend bool operator == (const String& s1, const String& s2);
845
849 friend bool operator != (const String& s1, const String& s2);
850
854 friend bool operator < (const String& s1, const String& s2);
855
859 friend bool operator <= (const String& s1, const String& s2);
860
864 friend bool operator > (const String& s1, const String& s2);
865
869 friend bool operator >= (const String& s1, const String& s2);
870
875 friend bool operator == (const char* char_ptr, const String& string);
876
881 friend bool operator != (const char* char_ptr, const String& string);
882
887 friend bool operator < (const char* char_ptr, const String& string);
888
893 friend bool operator <= (const char* char_ptr, const String& string);
894
899 friend bool operator > (const char* char_ptr, const String& string);
900
905 friend bool operator >= (const char* char_ptr, const String& string);
906
910 bool operator == (const char* char_ptr) const;
911
915 bool operator != (const char* char_ptr) const;
916
920 bool operator < (const char* char_ptr) const;
921
925 bool operator <= (const char* char_ptr) const;
926
930 bool operator > (const char* char_ptr) const;
931
935 bool operator >= (const char* char_ptr) const;
936
939 friend bool operator == (char c, const String& string);
940
943 friend bool operator != (char c, const String& string);
944
947 friend bool operator < (char c, const String& string);
948
951 friend bool operator <= (char c, const String& string);
952
955 friend bool operator > (char c, const String& string);
956
958 friend bool operator >= (char c, const String& string);
959
961 bool operator == (char c) const;
962
964 bool operator != (char c) const;
965
967 bool operator < (char c) const;
968
970 bool operator <= (char c) const;
971
973 bool operator > (char c) const;
974
976 bool operator >= (char c) const;
977
979
982
984 bool isValid() const;
985
987 void dump(std::ostream& s = std::cout, Size depth = 0) const;
988
990
993
995 std::istream& getline(std::istream& s = std::cin, char delimiter = '\n');
996
998// BALL_EXPORT
999// friend std::istream& getline(std::istream& s, String& string, char delimiter);
1000
1002
1004 static const String EMPTY;
1005
1009
1013 typedef string::value_type valuetype;
1014 typedef string::traits_type traits_type;
1015 typedef string::allocator_type allocator_type;
1016 typedef string::reference reference;
1017 typedef string::const_reference const_reference;
1018 typedef string::pointer pointer;
1019 typedef string::const_pointer const_pointer;
1020 typedef string::iterator iterator;
1021 typedef string::const_iterator const_iterator;
1022 typedef string::reverse_iterator reverse_iterator;
1023 typedef string::const_reverse_iterator const_reverse_iterator;
1024 typedef string::difference_type difference_type;
1025 typedef string::size_type size_type;
1027
1031
1033 iterator begin() BALL_NOEXCEPT;
1035 const_iterator begin() const BALL_NOEXCEPT;
1037 iterator end() BALL_NOEXCEPT;
1039 const_iterator end() const BALL_NOEXCEPT;
1041 reverse_iterator rbegin() BALL_NOEXCEPT;
1043 const_reverse_iterator rbegin() const BALL_NOEXCEPT;
1045 reverse_iterator rend() BALL_NOEXCEPT;
1047 const_reverse_iterator rend() const BALL_NOEXCEPT;
1048
1050 const_iterator cbegin() const BALL_NOEXCEPT;
1052 const_iterator cend() const BALL_NOEXCEPT;
1054 const_reverse_iterator crbegin() const BALL_NOEXCEPT;
1056 const_reverse_iterator crend() const BALL_NOEXCEPT;
1057
1059
1063
1065 size_t size() const BALL_NOEXCEPT;
1067 size_t length() const BALL_NOEXCEPT;
1069 size_t max_size() const BALL_NOEXCEPT;
1071 void resize(size_t n);
1073 void resize(size_t n, char c);
1075 size_t capacity() const BALL_NOEXCEPT;
1077 void reserve(size_t n = 0);
1079 void clear() BALL_NOEXCEPT;
1081 bool empty() const BALL_NOEXCEPT;
1082
1084 void shrink_to_fit();
1086
1090
1092 char& operator[] (size_t pos);
1094 const char& operator[] (size_t pos) const;
1096 char& at(size_t pos);
1098 const char& at(size_t pos) const;
1099
1101 char& front();
1103 const char& front() const;
1105 char& back();
1107 const char& back() const;
1109
1114 String& operator += (const String& str);
1116 String& operator += (const string& str);
1118 String& operator += (const char* s);
1120 String& operator += (char c);
1121
1123 String& operator += (std::initializer_list<char> il);
1124
1126 String& append(const String& str);
1128 String& append(const string& str);
1130 String& append(const string& str, size_t subpos, size_t sublen);
1132 String& append(const char* s);
1134 String& append(const char* s, size_t n);
1136 String& append(size_t n, char c);
1138 template <class InputIterator>
1139 String& append(InputIterator first, InputIterator last);
1140
1142 String& append(std::initializer_list<char> li);
1143
1145 void push_back(char c);
1147 String& assign(const String& str);
1149 String& assign(const string& str);
1151 String& assign(const string& str, size_t subpos, size_t sublen);
1153 String& assign(const char* s);
1155 String& assign(const char* s, size_t n);
1157 String& assign(size_t n, char c);
1159 template <class InputIterator>
1160 String& assign(InputIterator first, InputIterator last);
1161
1163 String& assign(std::initializer_list<char> li);
1164
1166 String& assign(string&& str) BALL_NOEXCEPT;
1167
1169 String& insert(size_t pos, const string& str);
1171 String& insert(size_t pos, const string& str, size_t subpos, size_t sublen);
1173 String& insert(size_t pos, const char* s);
1175 String& insert(size_t pos, const char* s, size_t n);
1177 String& insert(size_t pos, size_t n, char c);
1178#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1180 iterator insert(const_iterator p, size_t n, char c);
1182 iterator insert(const_iterator p, char c);
1183#else
1185 void insert(iterator p, size_t n, char c);
1188#endif
1190 template <class InputIterator>
1191 iterator insert(iterator p, InputIterator first, InputIterator last);
1192#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_INITLIST_INSERT
1194 String& insert(const_iterator p, std::initializer_list<char> li);
1195#endif
1196
1198 String& erase(size_t pos = 0, size_t len = npos);
1199#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1201 iterator erase(const_iterator p);
1203 iterator erase(const_iterator first, const_iterator last);
1204#else
1209#endif
1210
1212 String& replace(size_t pos, size_t len, const string& str);
1214 String& replace(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
1216 String& replace(size_t pos, size_t len, const char* s);
1218 String& replace(size_t pos, size_t len, const char* s, size_t n);
1220 String& replace(size_t pos, size_t len, size_t n, char c);
1221#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1223 String& replace(const_iterator i1, const_iterator i2, const string& str);
1225 String& replace(const_iterator i1, const_iterator i2, const char* s);
1227 String& replace(const_iterator i1, const_iterator i2, const char* s, size_t n);
1229 String& replace(const_iterator i1, const_iterator i2, size_t n, char c);
1231 template <class InputIterator>
1232 String& replace(const_iterator i1, const_iterator i2, InputIterator first, InputIterator last);
1233#else
1235 String& replace(iterator i1, iterator i2, const string& str);
1237 String& replace(iterator i1, iterator i2, const char* s);
1239 String& replace(iterator i1, iterator i2, const char* s, size_t n);
1241 String& replace(iterator i1, iterator i2, size_t n, char c);
1243 template <class InputIterator>
1244 String& replace(iterator i1, iterator i2, InputIterator first, InputIterator last);
1245#endif
1246#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1248 String& replace(const_iterator i1, const_iterator i2, std::initializer_list<char> li);
1249#endif
1250
1252 void swap(string& str);
1253
1255 void pop_back();
1257
1261
1263 const char* c_str() const BALL_NOEXCEPT;
1265 const char* data() const BALL_NOEXCEPT;
1267 allocator_type get_allocator() const BALL_NOEXCEPT;
1269 size_t copy(char* s, size_t len, size_t pos = 0) const;
1270
1272 size_t find(const string& str, size_t pos = 0) const BALL_NOEXCEPT;
1274 size_t find(const char* s, size_t pos = 0) const;
1276 size_t find(const char* s, size_t pos, size_t n) const;
1278 size_t find(char c, size_t pos = 0) const BALL_NOEXCEPT;
1279
1281 size_t rfind(const string& str, size_t pos = npos) const BALL_NOEXCEPT;
1283 size_t rfind(const char* s, size_t pos = npos) const;
1285 size_t rfind(const char* s, size_t pos, size_t n) const;
1287 size_t rfind(char c, size_t pos = npos) const BALL_NOEXCEPT;
1288
1290 size_t find_first_of(const string& str, size_t pos = 0) const BALL_NOEXCEPT;
1292 size_t find_first_of(const char* s, size_t pos = 0) const;
1294 size_t find_first_of(const char* s, size_t pos, size_t n) const;
1296 size_t find_first_of(char c, size_t pos = 0) const BALL_NOEXCEPT;
1297
1299 size_t find_last_of(const string& str, size_t pos = npos) const BALL_NOEXCEPT;
1301 size_t find_last_of(const char* s, size_t pos = npos) const;
1303 size_t find_last_of(const char* s, size_t pos, size_t n) const;
1305 size_t find_last_of(char c, size_t pos = npos) const BALL_NOEXCEPT;
1306
1308 size_t find_first_not_of(const string& str, size_t pos = 0) const BALL_NOEXCEPT;
1310 size_t find_first_not_of(const char* s, size_t pos = 0) const;
1312 size_t find_first_not_of(const char* s, size_t pos, size_t n) const;
1314 size_t find_first_not_of(char c, size_t pos = 0) const BALL_NOEXCEPT;
1315
1317 size_t find_last_not_of(const string& str, size_t pos = npos) const BALL_NOEXCEPT;
1319 size_t find_last_not_of(const char* s, size_t pos = npos) const;
1321 size_t find_last_not_of(const char* s, size_t pos, size_t n) const;
1323 size_t find_last_not_of(char c, size_t pos = npos) const BALL_NOEXCEPT;
1324
1326 string substr(size_t pos = 0, size_t len = npos) const;
1327
1329 int compare(const string& str) const BALL_NOEXCEPT;
1331 int compare(size_t pos, size_t len, const string& str) const;
1333 int compare(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
1335 //int compare(const char* s) const;
1337 int compare(size_t pos, size_t len, const char* s) const;
1339 int compare(size_t pos, size_t len, const char* s, size_t n) const;
1340
1342
1344
1345 protected:
1346
1347 // the validate... methods check perform a thorough
1348 // index checking and an index translation
1349 // Indices below zero are interpreted as indices
1350 // relative to the end of the string
1351 // All methods throw IndexUnder|Overflow exceptions
1352 //
1353 void validateIndex_(Index& index) const;
1354
1355 void validateRange_(Index& from, Size& len) const;
1356
1357 static void validateCharPtrRange_(Index& from, Size& len, const char* char_ptr);
1358
1359 static void valudateCharPtrIndex_(Index& index);
1360
1361 private:
1362
1364 string str_;
1365
1366 static int compareAscendingly_(const char* a, const char* b);
1367
1368 static int compareDescendingly_(const char* a, const char* b);
1369
1370 static CompareMode compare_mode_;
1371
1372 static char B64Chars_[64];
1373
1374 static int Index_64_[128];
1375 };
1376
1386 {
1387 friend class String;
1388
1389 public:
1390
1392
1393
1396
1397
1402 : public Exception::GeneralException
1403 {
1404 public:
1405 UnboundSubstring(const char* file, int line);
1406 };
1407
1415 {
1416 public:
1417 InvalidSubstring(const char* file, int line);
1418 };
1419
1421
1424
1429
1435 Substring(const Substring& substring, bool deep = true);
1436
1444 Substring(const String& string, Index from = 0, Size len = String::EndPos);
1445
1449 virtual ~Substring();
1450
1455 void destroy();
1456
1461 virtual void clear();
1462
1464
1467
1472 operator String() const;
1473
1478 //explicit operator string() const;
1479
1485
1487
1490
1499 Substring& bind(const String& string, Index from = 0, Size len = String::EndPos);
1500
1506 Substring& bind(const Substring& substring, Index from = 0, Size len = String::EndPos);
1507
1509 void unbind();
1510
1513
1515 const String* getBoundString() const
1516;
1517
1519
1522
1526 void set(const String& string);
1527
1531 void set(const Substring& s);
1532
1538 void set(const char* char_ptr, Size size = String::EndPos);
1539
1543 const Substring& operator = (const String& string);
1544
1548 const Substring& operator = (const Substring& substring);
1549
1554 const Substring& operator = (const char* char_ptr);
1555
1557
1560
1564 char* c_str();
1565
1569 const char* c_str() const;
1570
1576
1582
1584 Size size() const;
1585
1591 char& operator [] (Index index);
1592
1598 char operator [] (Index index) const;
1599
1604
1609
1611
1614
1616 bool isBound() const;
1617
1619 bool isEmpty() const;
1620
1622
1625
1629 bool operator == (const Substring& substring) const;
1630
1634 bool operator != (const Substring& substring) const;
1635
1639 bool operator == (const String& string) const;
1640
1644 bool operator != (const String& string) const;
1645
1650 friend bool operator == (const String& string, const Substring& substring);
1651
1656 friend bool operator != (const String& string, const Substring& substring);
1657
1662 bool operator == (const char* char_ptr) const;
1663
1668 bool operator != (const char* char_ptr) const;
1669
1673 bool operator == (char c) const;
1674
1678 bool operator != (char c) const;
1679
1681
1684
1687 friend std::ostream& operator << (std::ostream& s, const Substring& substring);
1688
1690
1693
1698 bool isValid() const;
1699
1703 void dump(std::ostream& s = std::cout, Size depth = 0) const;
1704
1706
1707 protected:
1708
1709 // throws IndexUnderflow|IndexOverflow
1710 void validateRange_(Index& from, Size& len) const;
1711
1712 private:
1713
1714 /*_ @name Attributes
1715 */
1716 //_@{
1717
1718 //_ pointer to the bound String
1719 String* bound_;
1720
1721 //_ start index in the bound String
1722 Index from_;
1723
1724 //_ end index in the bound String
1725 Index to_;
1726 //_@}
1727 };
1728
1729 // non-member functions of String
1730
1734 bool operator == (const String& s1, const String& s2);
1735
1739 bool operator != (const String& s1, const String& s2);
1740
1744 bool operator < (const String& s1, const String& s2);
1745
1749 bool operator <= (const String& s1, const String& s2);
1750
1754 bool operator > (const String& s1, const String& s2);
1755
1759 bool operator >= (const String& s1, const String& s2);
1760
1763 String operator + (const String& s1, const string& s2);
1764
1767 String operator + (const string& s1, const String& s2);
1768
1771 String operator + (const String& s1, const String& s2);
1772
1775 String operator + (const String& s1, const char* char_ptr);
1776
1779 String operator + (const char* char_ptr, const String& s);
1780
1783 String operator + (const String& s, char c);
1784
1787 String operator + (char c, const String& s);
1788
1791 String operator + (String&& s1, const string& s2);
1792
1796
1800
1803 String operator + (const String& s1, string&& s2);
1804
1807 String operator + (string&& s1, const String& s2);
1808
1811 String operator + (const string& s1, String&& s2);
1812
1816
1819 String operator + (String&& s1, const char* char_ptr);
1820
1823 String operator + (const char* char_ptr, String&& s);
1824
1828
1832} // namespace BALL
1833
1834namespace std
1835{
1836 // Non-member functions for string
1837
1839 istream& operator>> (istream& is, BALL::String& str);
1840
1842 ostream& operator<< (ostream& os, BALL::String const& str);
1843
1845 istream& getline(istream& is, BALL::String& str, char delim);
1847 istream& getline(istream& is, BALL::String& str);
1848
1849
1851 istream& getline(istream& is, BALL::String&& str, char delim);
1853 istream& getline(istream& is, BALL::String&& str);
1854}
1855
1857
1858# ifndef BALL_NO_INLINE_FUNCTIONS
1859# include <BALL/DATATYPE/string.iC>
1860# endif
1861
1862#endif // BALL_DATATYPE_STRING_H
#define BALL_CREATE_DEEP(name)
Definition: create.h:26
BALL_EXPORT std::ostream & operator<<(std::ostream &os, const Exception::GeneralException &e)
STL namespace.
istream & getline(istream &is, BALL::String &&str)
Definition: constants.h:13
BALL_ULONG64_TYPE LongSize
BALL_EXPORT bool operator<(const String &s1, const String &s2)
BALL_EXPORT bool operator>(const String &s1, const String &s2)
ConstRandomAccessIterator< Container, DataType, Position, Traits > operator+(Distance distance, const ConstRandomAccessIterator< Container, DataType, Position, Traits > &iterator)
BALL_EXPORT bool operator==(const String &s1, const String &s2)
BALL_EXPORT bool operator!=(const String &s1, const String &s2)
BALL_EXPORT bool operator>=(const String &s1, const String &s2)
BALL_LONG64_TYPE LongIndex
std::istream & operator>>(std::istream &is, TRegularData1D< ValueType > &grid)
Input operator.
BALL_EXPORT bool operator<=(const String &s1, const String &s2)
BALL_EXTERN_VARIABLE const double c
Definition: constants.h:149
Index compare(const T1 &a, const T2 &b)
Definition: MATHS/common.h:307
void swap(String &s)
Swaps the contents with another String.
static const char * CHARACTER_CLASS__QUOTES
Definition: string.h:141
unsigned int toUnsignedInt() const
bool isDigit() const
static bool isSpace(char c)
True, if the character is a space.
string::traits_type traits_type
Definition: string.h:1014
Size substitute(const String &to_replace, const String &replacing)
String & trimRight(const char *trimmed=CHARACTER_CLASS__WHITESPACE)
unsigned long toUnsignedLong() const
bool isAlpha() const
string::const_iterator const_iterator
Definition: string.h:1021
unsigned short toUnsignedShort() const
static const char * CHARACTER_CLASS__ASCII_ALPHA
Character class containing all letters (lower and upper case)
Definition: string.h:109
bool isWhitespace() const
void toLower(Index from=0, Size len=EndPos)
void set(int i)
Assign a String from an int.
String(Size buffer_size, const char *format,...)
string::const_reference const_reference
Definition: string.h:1017
void set(Size buffer_size, const char *format,...)
String & replace(size_t pos, size_t len, size_t n, char c)
String(double d)
Construct a String from a double value.
static const char * CHARACTER_CLASS__WHITESPACE
Definition: string.h:137
Substring from(const String &s, Index from=0) const
int compare(const char *char_ptr, Index from, Size len) const
static const String EMPTY
Constant empty string.
Definition: string.h:1004
static bool isAlnum(char c)
True, if the character is a letter or a digit.
String & trim(const char *trimmed=CHARACTER_CLASS__WHITESPACE)
String(unsigned long)
Construct a String from an unsigned long.
String & replace(size_t pos, size_t len, const string &str)
iterator insert(iterator p, char c)
bool toBool() const
iterator insert(iterator p, InputIterator first, InputIterator last)
static const char * CHARACTER_CLASS__ASCII_NUMERIC
Character class containing the digits from 0 to 9.
Definition: string.h:121
iterator begin() BALL_NOEXCEPT
int toInt() const
int compare(const String &string, Index from=0) const
void destroy()
Clear the string (reset to the empty string)
void set(unsigned char uc)
Assign a String from an unsigned char.
string::difference_type difference_type
Definition: string.h:1024
void dump(std::ostream &s=std::cout, Size depth=0) const
void get(char *char_ptr, Index from=0, Size len=EndPos) const
void toUpper(Index from=0, Size len=EndPos)
void substituteAll(const String &to_replace, const String &replacing)
String(const char *char_ptr, Index from=0, Size len=EndPos)
String decodeBase64()
Substring after(const String &s, Index from=0) const
Size countFields(const char *delimiters=CHARACTER_CLASS__WHITESPACE) const
static const char * CHARACTER_CLASS__ASCII_ALPHANUMERIC
Character class containing all letters and digits.
Definition: string.h:112
bool isSpace() const
bool isAlnum() const
String(const String &s, Index from, Size len=EndPos)
static bool isWhitespace(char c)
unsigned char toUnsignedChar() const
Return the first character of the string converted to an unsigned char.
string::pointer pointer
Definition: string.h:1018
long toLong() const
String & replace(iterator i1, iterator i2, size_t n, char c)
String encodeBase64()
Convert a string to a base 64 string.
String(long l)
Construct a String from a long.
string::value_type valuetype
Definition: string.h:1013
void set(short s)
Assign a String from a short.
String & replace(size_t pos, size_t len, const string &str, size_t subpos, size_t sublen)
static bool isDigit(char c)
True, if the character is a digit.
String(string &&s)
Move constructor for STL string.
String & trimLeft(const char *trimmed=CHARACTER_CLASS__WHITESPACE)
static const char * CHARACTER_CLASS__ASCII_UPPER
Character class containing all upper case letters.
Definition: string.h:118
bool hasPrefix(const String &s) const
True, if the string starts with s
Substring before(const String &s, Index from=0) const
bool has(char c) const
True, if the string contains character c
void set(std::stringstream &s)
void set(long l)
Assign a String from a long.
String(const char c, Size len=1)
void swap(string &str)
String & truncate(Size size)
Truncate the string to length size
String & replace(size_t pos, size_t len, const char *s)
String & operator=(string &&s)
Move assignment operator for STL string.
String()
Default Constructor.
String(const QByteArray &string)
QByteArray copy constructor.
Size splitQuoted(std::vector< String > &strings, const char *delimiters=CHARACTER_CLASS__WHITESPACE, const char *quotes=CHARACTER_CLASS__QUOTES, Index from=0) const
static CompareMode getCompareMode()
Return the current comparison mode.
int compare(const String &string, Index from, Size len) const
String & replace(iterator i1, iterator i2, const string &str)
String(short s)
Construct a String from a short.
void set(float f)
Assign a String from a float value.
String & erase(size_t pos=0, size_t len=npos)
void set(unsigned short us)
Assign a String from an unsigned short.
void set(unsigned long ul)
Assign a String from an unsigned long.
bool hasSubstring(const String &s, Index from=0) const
True, if the string contains the substring s after index from
String & replace(iterator i1, iterator i2, const char *s)
iterator erase(iterator first, iterator last)
int compare(char c, Index from=0) const
Substring right(Size len) const
Return a substring containing the len rightmost characters of the string.
static const char * CHARACTER_CLASS__ASCII_LOWER
Character class containing all lower case letters.
Definition: string.h:115
int compare(const char *char_ptr, Index from=0) const
String & replace(size_t pos, size_t len, const char *s, size_t n)
static const Size EndPos
Definition: string.h:94
string::size_type size_type
Definition: string.h:1025
Substring getSubstring(Index from=0, Size len=EndPos) const
bool hasSuffix(const String &s) const
True, if the string ends with s
string::const_reverse_iterator const_reverse_iterator
Definition: string.h:1023
void set(const char *char_ptr, Index from=0, Size len=EndPos)
String(float f)
Construct a String from a float value.
short toShort() const
void set(unsigned int ui)
Assign a String from an unsigned int.
Size split(String string_array[], Size array_size, const char *delimiters=CHARACTER_CLASS__WHITESPACE, Index from=0) const
void set(double d)
Assign a String from a double value.
string::reverse_iterator reverse_iterator
Definition: string.h:1022
const char * c_str() const BALL_NOEXCEPT
void set(const String &s)
String(const string &string)
STL string copy constructor.
String(std::stringstream &s)
String & replace(iterator i1, iterator i2, InputIterator first, InputIterator last)
void insert(iterator p, size_t n, char c)
string::reference reference
Definition: string.h:1016
String(const String &s)
Copy constructor.
String(const QString &string)
QString copy constructor.
string::allocator_type allocator_type
Definition: string.h:1015
bool isValid() const
String trim(const char *trimmed=CHARACTER_CLASS__WHITESPACE) const
Size split(std::vector< String > &strings, const char *delimiters=CHARACTER_CLASS__WHITESPACE, Index from=0) const
void set(char c, Size len=1)
Assign a String from the result of repeating c len times.
double toDouble() const
String & operator=(String &&s)
Move assigment operator.
std::istream & getline(std::istream &s=std::cin, char delimiter='\n')
String(unsigned short us)
Construct a String from an unsigned short.
void set(const String &string, Index from, Size len=EndPos)
String(String &&s)
Move constructor.
string::const_pointer const_pointer
Definition: string.h:1019
iterator erase(iterator p)
bool isFloat() const
String & replace(iterator i1, iterator i2, const char *s, size_t n)
String(const unsigned char uc)
Creates a string just containing an unsigned character.
static const char * CHARACTER_CLASS__ASCII_FLOAT
Character class containing the digits from 0 to 9 and a dot.
Definition: string.h:124
char toChar() const
Return the first character of the string.
Substring through(const String &s, Index from=0) const
Substring instr(const String &pattern, Index from=0) const
Size countFieldsQuoted(const char *delimiters=CHARACTER_CLASS__WHITESPACE, const char *quotes=CHARACTER_CLASS__QUOTES) const
String(int i)
Construct a String from an int.
static void setCompareMode(CompareMode compare_mode)
Set the compareison mode for all string comparisons.
String(unsigned int ui)
Construct a String from an unsigned int.
Substring left(Size len) const
Return a substring containing the len leftmost characters of the string.
void pop_back()
string::iterator iterator
Definition: string.h:1020
virtual ~String()
Destructor.
String & reverse(Index from=0, Size len=EndPos)
String getFieldQuoted(Index index, const char *delimiters=CHARACTER_CLASS__WHITESPACE, const char *quotes=CHARACTER_CLASS__QUOTES, Index *from=0) const
float toFloat() const
bool isEmpty() const
True, if the string has size 0.
virtual void * create(bool=true, bool empty=false) const
String getField(Index index, const char *delimiters=CHARACTER_CLASS__WHITESPACE, Index *from=0) const
static bool isAlpha(char c)
True, if the character is a letter (any case)
void set(const String &string)
bool isValid() const
Substring & bind(const Substring &substring, Index from=0, Size len=String::EndPos)
const String * getBoundString() const
Retunrs a const pointer to the bound String.
Size size() const
Return the substring size.
void validateRange_(Index &from, Size &len) const
Substring(const Substring &substring, bool deep=true)
void dump(std::ostream &s=std::cout, Size depth=0) const
Substring & bind(const String &string, Index from=0, Size len=String::EndPos)
String toString() const
Substring & toUpper()
Index getFirstIndex() const
void set(const char *char_ptr, Size size=String::EndPos)
virtual ~Substring()
Substring & toLower()
void unbind()
unbinds the substring from the string it is bound to
String * getBoundString()
Return a pointer to the bound String.
const char * c_str() const
Substring(const String &string, Index from=0, Size len=String::EndPos)
bool isBound() const
Return true, if the substring is bound to a String.
Index getLastIndex() const
bool isEmpty() const
Return true, if the substring is empty or unbound.
void set(const Substring &s)
virtual void clear()
UnboundSubstring(const char *file, int line)
InvalidSubstring(const char *file, int line)
#define BALL_EXPORT
Definition: COMMON/global.h:50