5#ifndef BALL_DATATYPE_STRING_H
6#define BALL_DATATYPE_STRING_H
8#ifndef BALL_CONFIG_CONFIG_H
9# include <BALL/CONFIG/config.h>
11#ifndef BALL_COMMON_GLOBAL_H
14#ifndef BALL_COMMON_CREATE_H
17#ifndef BALL_COMMON_MACROS_H
20#ifndef BALL_COMMON_EXCEPTION_H
23#ifndef BALL_COMMON_DEBUG_H
68 virtual void*
create(
bool =
true,
bool empty =
false)
const;
98 static const size_t npos = -1;
173 explicit String(
const QByteArray&
string);
237#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
255 operator string const&()
const;
289 void set(
Size buffer_size,
const char *format, ...);
294 void set(std::stringstream& s);
300 void set(
unsigned char uc);
306 void set(
unsigned short us);
312 void set(
unsigned int ui);
318 void set(
unsigned long ul);
320#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
351 const String& operator = (
const char* pc);
356 const String& operator = (std::stringstream& s);
362 const String& operator = (
unsigned char uc);
368 const String& operator = (
unsigned short us);
374 const String& operator = (
unsigned int ui);
380 const String& operator = (
unsigned long ul);
382#ifdef BALL_ALLOW_LONG64_TYPE_OVERLOADS
531 const char* quotes = CHARACTER_CLASS__QUOTES)
const;
544 const char* quotes = CHARACTER_CLASS__QUOTES,
Index* from = 0)
const;
557 Size split(std::vector<String>& strings,
const char* delimiters = CHARACTER_CLASS__WHITESPACE,
Index from = 0)
const;
566 Size splitQuoted(std::vector<String>& strings,
const char* delimiters = CHARACTER_CLASS__WHITESPACE,
567 const char* quotes = CHARACTER_CLASS__QUOTES,
Index from = 0)
const;
593 String&
trim(
const char* trimmed = CHARACTER_CLASS__WHITESPACE);
599 String trim(
const char* trimmed = CHARACTER_CLASS__WHITESPACE)
const;
987 void dump(std::ostream& s = std::cout,
Size depth = 0)
const;
995 std::istream&
getline(std::istream& s = std::cin,
char delimiter =
'\n');
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;
1084 void shrink_to_fit();
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;
1103 const
char& front() const;
1107 const
char& back() const;
1130 String& append(const
string& str,
size_t subpos,
size_t sublen);
1138 template <class InputIterator>
1139 String& append(InputIterator first, InputIterator last);
1145 void push_back(
char c);
1151 String& assign(const
string& str,
size_t subpos,
size_t sublen);
1159 template <class InputIterator>
1160 String& assign(InputIterator first, InputIterator last);
1169 String& insert(
size_t pos, const
string& str);
1171 String& insert(
size_t pos, const
string& str,
size_t subpos,
size_t sublen);
1175 String& insert(
size_t pos, const
char* s,
size_t n);
1178#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1190 template <
class InputIterator>
1192#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_INITLIST_INSERT
1199#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1214 String&
replace(
size_t pos,
size_t len,
const string& str,
size_t subpos,
size_t sublen);
1221#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1231 template <
class InputIterator>
1243 template <
class InputIterator>
1246#ifdef BALL_HAS_STD_STRING_CONST_ITERATOR_FUNCTIONS
1263 const char*
c_str() const BALL_NOEXCEPT;
1265 const
char* data() const BALL_NOEXCEPT;
1269 size_t copy(
char* s,
size_t len,
size_t pos = 0) const;
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;
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;
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;
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;
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;
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;
1326 string substr(
size_t pos = 0,
size_t len = npos) const;
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;
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;
1353 void validateIndex_(
Index& index) const;
1357 static
void validateCharPtrRange_(
Index& from,
Size& len, const
char* char_ptr);
1359 static
void valudateCharPtrIndex_(
Index& index);
1366 static
int compareAscendingly_(const
char* a, const
char* b);
1368 static
int compareDescendingly_(const
char* a, const
char* b);
1372 static
char B64Chars_[64];
1374 static
int Index_64_[128];
1402 : public Exception::GeneralException
1703 void dump(std::ostream& s = std::cout,
Size depth = 0)
const;
1858# ifndef BALL_NO_INLINE_FUNCTIONS
1859# include <BALL/DATATYPE/string.iC>
#define BALL_CREATE_DEEP(name)
BALL_EXPORT std::ostream & operator<<(std::ostream &os, const Exception::GeneralException &e)
istream & getline(istream &is, BALL::String &&str)
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
Index compare(const T1 &a, const T2 &b)
void swap(String &s)
Swaps the contents with another String.
static const char * CHARACTER_CLASS__QUOTES
unsigned int toUnsignedInt() const
static bool isSpace(char c)
True, if the character is a space.
string::traits_type traits_type
Size substitute(const String &to_replace, const String &replacing)
String & trimRight(const char *trimmed=CHARACTER_CLASS__WHITESPACE)
unsigned long toUnsignedLong() const
string::const_iterator const_iterator
unsigned short toUnsignedShort() const
static const char * CHARACTER_CLASS__ASCII_ALPHA
Character class containing all letters (lower and upper case)
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
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
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.
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)
iterator insert(iterator p, InputIterator first, InputIterator last)
static const char * CHARACTER_CLASS__ASCII_NUMERIC
Character class containing the digits from 0 to 9.
iterator begin() BALL_NOEXCEPT
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
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)
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.
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 & 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
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.
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)
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.
int compare(const char *char_ptr, Index from=0) const
String & replace(size_t pos, size_t len, const char *s, size_t n)
string::size_type size_type
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
void set(const char *char_ptr, Index from=0, Size len=EndPos)
String(float f)
Construct a String from a float value.
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
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
String(const String &s)
Copy constructor.
String(const QString &string)
QString copy constructor.
string::allocator_type allocator_type
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.
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
iterator erase(iterator p)
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.
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.
string::iterator iterator
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
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)
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)
Index getFirstIndex() const
void set(const char *char_ptr, Size size=String::EndPos)
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)
UnboundSubstring(const char *file, int line)
InvalidSubstring(const char *file, int line)