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
21 # include <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 
36 using std::string;
37 
38 class QString;
39 class QByteArray;
40 
41 namespace 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 
109  static const char* CHARACTER_CLASS__ASCII_ALPHA;
110 
113 
115  static const char* CHARACTER_CLASS__ASCII_LOWER;
116 
118  static const char* CHARACTER_CLASS__ASCII_UPPER;
119 
121  static const char* CHARACTER_CLASS__ASCII_NUMERIC;
122 
124  static const char* CHARACTER_CLASS__ASCII_FLOAT;
125 
137  static const char* CHARACTER_CLASS__WHITESPACE;
138 
141  static const char* CHARACTER_CLASS__QUOTES;
142 
144 
147 
149  String();
150 
152  String(const string& string);
153 
155  String(const String& s);
156 
158  String(String&& s);
159 
161  String(string&& s);
162 
164  String& operator=(String&& s);
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
238  String(LongIndex l);
240 
242  String(LongSize);
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
321  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
383  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 
403  static void setCompareMode(CompareMode compare_mode);
405 
407  static CompareMode getCompareMode();
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 
602  String& truncate(Size size);
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 
796  String encodeBase64();
797 
801  String decodeBase64();
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 
1113  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
1179  iterator insert(const_iterator p, size_t n, char c);
1182  iterator insert(const_iterator p, char c);
1183 #else
1184  void insert(iterator p, size_t n, char c);
1187  iterator insert(iterator p, char c);
1188 #endif
1189  template <class InputIterator>
1191  iterator insert(iterator p, InputIterator first, InputIterator last);
1192 #ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_INITLIST_INSERT
1193  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
1200  iterator erase(const_iterator p);
1203  iterator erase(const_iterator first, const_iterator last);
1204 #else
1205  iterator erase(iterator p);
1208  iterator erase(iterator first, iterator last);
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
1222  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
1234  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
1247  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 
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 
1428  Substring();
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 
1484  String toString() const;
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 
1512  String* getBoundString();
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 
1575  Index getFirstIndex() const;
1576 
1581  Index getLastIndex() const;
1582 
1584  Size size() const;
1585 
1591  char& operator [] (Index index);
1592 
1598  char operator [] (Index index) const;
1599 
1603  Substring& toLower();
1604 
1608  Substring& toUpper();
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 
1649  BALL_EXPORT
1650  friend bool operator == (const String& string, const Substring& substring);
1651 
1655  BALL_EXPORT
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 
1686  BALL_EXPORT
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 
1733  BALL_EXPORT
1734  bool operator == (const String& s1, const String& s2);
1735 
1738  BALL_EXPORT
1739  bool operator != (const String& s1, const String& s2);
1740 
1743  BALL_EXPORT
1744  bool operator < (const String& s1, const String& s2);
1745 
1748  BALL_EXPORT
1749  bool operator <= (const String& s1, const String& s2);
1750 
1753  BALL_EXPORT
1754  bool operator > (const String& s1, const String& s2);
1755 
1758  BALL_EXPORT
1759  bool operator >= (const String& s1, const String& s2);
1760 
1762  BALL_EXPORT
1763  String operator + (const String& s1, const string& s2);
1764 
1766  BALL_EXPORT
1767  String operator + (const string& s1, const String& s2);
1768 
1770  BALL_EXPORT
1771  String operator + (const String& s1, const String& s2);
1772 
1774  BALL_EXPORT
1775  String operator + (const String& s1, const char* char_ptr);
1776 
1778  BALL_EXPORT
1779  String operator + (const char* char_ptr, const String& s);
1780 
1782  BALL_EXPORT
1783  String operator + (const String& s, char c);
1784 
1786  BALL_EXPORT
1787  String operator + (char c, const String& s);
1788 
1790  BALL_EXPORT
1791  String operator + (String&& s1, const string& s2);
1792 
1794  BALL_EXPORT
1795  String operator + (String&& s1, const String& s2);
1796 
1798  BALL_EXPORT
1799  String operator + (String&& s1, String&& s2);
1800 
1802  BALL_EXPORT
1803  String operator + (const String& s1, string&& s2);
1804 
1806  BALL_EXPORT
1807  String operator + (string&& s1, const String& s2);
1808 
1810  BALL_EXPORT
1811  String operator + (const string& s1, String&& s2);
1812 
1814  BALL_EXPORT
1815  String operator + (const String& s1, String&& s2);
1816 
1818  BALL_EXPORT
1819  String operator + (String&& s1, const char* char_ptr);
1820 
1822  BALL_EXPORT
1823  String operator + (const char* char_ptr, String&& s);
1824 
1826  BALL_EXPORT
1827  String operator + (String&& s, char c);
1828 
1830  BALL_EXPORT
1831  String operator + (char c, String&& s);
1832 } // namespace BALL
1833 
1834 namespace 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
BALL::String::EMPTY
static const String EMPTY
Constant empty string.
Definition: string.h:1004
BALL::String::iterator
string::iterator iterator
Definition: string.h:1020
BALL::operator!=
BALL_EXPORT bool operator!=(const String &s1, const String &s2)
BALL::LongSize
BALL_ULONG64_TYPE LongSize
Definition: COMMON/global.h:192
create.h
BALL::operator<
BALL_EXPORT bool operator<(const String &s1, const String &s2)
BALL::String::reverse_iterator
string::reverse_iterator reverse_iterator
Definition: string.h:1022
BALL::String::CHARACTER_CLASS__ASCII_LOWER
static const char * CHARACTER_CLASS__ASCII_LOWER
Character class containing all lower case letters.
Definition: string.h:115
BALL::String::pointer
string::pointer pointer
Definition: string.h:1018
BALL::String::EndPos
static const Size EndPos
Definition: string.h:94
BALL_CREATE_DEEP
#define BALL_CREATE_DEEP(name)
Definition: create.h:26
BALL::String::CHARACTER_CLASS__ASCII_FLOAT
static const char * CHARACTER_CLASS__ASCII_FLOAT
Character class containing the digits from 0 to 9 and a dot.
Definition: string.h:124
BALL::Substring::UnboundSubstring
Definition: string.h:1401
BALL::String::CHARACTER_CLASS__ASCII_ALPHANUMERIC
static const char * CHARACTER_CLASS__ASCII_ALPHANUMERIC
Character class containing all letters and digits.
Definition: string.h:112
BALL::String::const_reference
string::const_reference const_reference
Definition: string.h:1017
BALL::String::difference_type
string::difference_type difference_type
Definition: string.h:1024
BALL::String
Definition: string.h:56
macros.h
BALL::operator>
BALL_EXPORT bool operator>(const String &s1, const String &s2)
BALL::String::valuetype
string::value_type valuetype
Definition: string.h:1013
BALL::String::const_reverse_iterator
string::const_reverse_iterator const_reverse_iterator
Definition: string.h:1023
BALL::operator>=
BALL_EXPORT bool operator>=(const String &s1, const String &s2)
BALL
Definition: constants.h:12
BALL::LongIndex
BALL_LONG64_TYPE LongIndex
Definition: COMMON/global.h:201
BALL::String::CHARACTER_CLASS__WHITESPACE
static const char * CHARACTER_CLASS__WHITESPACE
Definition: string.h:137
BALL::String::reference
string::reference reference
Definition: string.h:1016
BALL_INDEX_TYPE
BALL_SIZE_TYPE
BALL::String::CHARACTER_CLASS__ASCII_NUMERIC
static const char * CHARACTER_CLASS__ASCII_NUMERIC
Character class containing the digits from 0 to 9.
Definition: string.h:121
std::getline
istream & getline(istream &is, BALL::String &str, char delim)
BALL::String::CHARACTER_CLASS__ASCII_ALPHA
static const char * CHARACTER_CLASS__ASCII_ALPHA
Character class containing all letters (lower and upper case)
Definition: string.h:109
BALL::Constants::c
const BALL_EXTERN_VARIABLE double c
Definition: constants.h:149
global.h
BALL::Maths::compare
Index compare(const T1 &a, const T2 &b)
Definition: MATHS/common.h:307
BALL::Substring::InvalidSubstring
Definition: string.h:1413
BALL::String::CompareMode
CompareMode
Definition: string.h:80
debug.h
BALL::operator==
BALL_EXPORT bool operator==(const String &s1, const String &s2)
BALL::Substring
Definition: string.h:1385
BALL::operator<<
BALL_EXPORT std::ostream & operator<<(std::ostream &os, const Exception::GeneralException &e)
BALL::String::traits_type
string::traits_type traits_type
Definition: string.h:1014
BALL::String::size_type
string::size_type size_type
Definition: string.h:1025
BALL::operator>>
std::istream & operator>>(std::istream &is, TRegularData1D< ValueType > &grid)
Input operator.
Definition: regularData1D.h:802
BALL::String::const_pointer
string::const_pointer const_pointer
Definition: string.h:1019
BALL::Exception::GeneralException
Definition: COMMON/exception.h:59
BALL::String::allocator_type
string::allocator_type allocator_type
Definition: string.h:1015
BALL::operator+
ConstRandomAccessIterator< Container, DataType, Position, Traits > operator+(Distance distance, const ConstRandomAccessIterator< Container, DataType, Position, Traits > &iterator)
Definition: randomAccessIterator.h:192
BALL::String::const_iterator
string::const_iterator const_iterator
Definition: string.h:1021
BALL::operator<=
BALL_EXPORT bool operator<=(const String &s1, const String &s2)
BALL_EXPORT
#define BALL_EXPORT
Definition: COMMON/global.h:50
BALL::String::CHARACTER_CLASS__ASCII_UPPER
static const char * CHARACTER_CLASS__ASCII_UPPER
Character class containing all upper case letters.
Definition: string.h:118
BALL::String::CHARACTER_CLASS__QUOTES
static const char * CHARACTER_CLASS__QUOTES
Definition: string.h:141
exception.h