Home  · Classes  · Annotated Classes  · Modules  · Members  · Namespaces  · Related Pages
String.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2017.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg$
32 // $Authors: Marc Sturm $
33 // --------------------------------------------------------------------------
34 
35 #ifndef OPENMS_DATASTRUCTURES_STRING_H
36 #define OPENMS_DATASTRUCTURES_STRING_H
37 
38 #include <OpenMS/CONCEPT/Types.h>
39 #include <OpenMS/OpenMSConfig.h>
40 
41 #include <string>
42 #include <vector>
43 
44 class QString;
45 
46 namespace OpenMS
47 {
48  class DataValue;
49 
57  class String :
58  public std::string
59  {
60 public:
61 
63  OPENMS_DLLAPI static const String EMPTY;
64 
68  typedef iterator Iterator;
71  typedef const_iterator ConstIterator;
73  typedef reverse_iterator ReverseIterator;
75  typedef const_reverse_iterator ConstReverseIterator;
77  typedef size_type SizeType;
78 
81 
83 
87  OPENMS_DLLAPI String();
90  OPENMS_DLLAPI String(const std::string& s);
92  OPENMS_DLLAPI String(const QString& s);
94  OPENMS_DLLAPI String(const char* s);
96  OPENMS_DLLAPI String(const char c);
98  OPENMS_DLLAPI String(const char* s, SizeType length);
100  OPENMS_DLLAPI String(size_t len, char c);
102  template <class InputIterator>
103  String(InputIterator first, InputIterator last) :
104  std::string(first, last)
105  {
106 
107  }
108 
110  OPENMS_DLLAPI String(int i);
112  OPENMS_DLLAPI String(unsigned int i);
114  OPENMS_DLLAPI String(short int i);
116  OPENMS_DLLAPI String(short unsigned int i);
118  OPENMS_DLLAPI String(long int i);
120  OPENMS_DLLAPI String(long unsigned int i);
122  OPENMS_DLLAPI String(long long unsigned int i);
124  OPENMS_DLLAPI String(long long signed int i);
126  OPENMS_DLLAPI String(float f);
128  OPENMS_DLLAPI String(double d);
130  OPENMS_DLLAPI String(long double ld);
132  OPENMS_DLLAPI String(const DataValue& d);
133 
135 
139  OPENMS_DLLAPI bool hasPrefix(const String& string) const;
141 
143  OPENMS_DLLAPI bool hasSuffix(const String& string) const;
144 
146  OPENMS_DLLAPI bool hasSubstring(const String& string) const;
147 
149  OPENMS_DLLAPI bool has(Byte byte) const;
151 
152 
161  OPENMS_DLLAPI String prefix(SizeType length) const;
162 
168  OPENMS_DLLAPI String suffix(SizeType length) const;
169 
176  OPENMS_DLLAPI String prefix(Int length) const;
177 
184  OPENMS_DLLAPI String suffix(Int length) const;
185 
191  OPENMS_DLLAPI String prefix(char delim) const;
192 
198  OPENMS_DLLAPI String suffix(char delim) const;
199 
212  OPENMS_DLLAPI String substr(size_t pos = 0, size_t n = npos) const;
213 
221  OPENMS_DLLAPI String chop(Size n) const;
222 
224 
225 
232  OPENMS_DLLAPI String& reverse();
234 
236  OPENMS_DLLAPI String& trim();
237 
245  OPENMS_DLLAPI String& quote(char q = '"', QuotingMethod method = ESCAPE);
246 
256  OPENMS_DLLAPI String& unquote(char q = '"', QuotingMethod method = ESCAPE);
257 
259  OPENMS_DLLAPI String& simplify();
260 
262  OPENMS_DLLAPI String& fillLeft(char c, UInt size);
263 
265  OPENMS_DLLAPI String& fillRight(char c, UInt size);
266 
268  OPENMS_DLLAPI String& toUpper();
269 
271  OPENMS_DLLAPI String& toLower();
272 
274  OPENMS_DLLAPI String& firstToUpper();
275 
277  OPENMS_DLLAPI String& substitute(char from, char to);
278 
280  OPENMS_DLLAPI String& substitute(const String& from, const String& to);
281 
283  OPENMS_DLLAPI String& remove(char what);
284 
286  OPENMS_DLLAPI String& ensureLastChar(char end);
287 
289  OPENMS_DLLAPI String& removeWhitespaces();
291 
295 
304  OPENMS_DLLAPI Int toInt() const;
305 
311  OPENMS_DLLAPI float toFloat() const;
312 
318  OPENMS_DLLAPI double toDouble() const;
319 
321  OPENMS_DLLAPI QString toQString() const;
322 
324 
328  OPENMS_DLLAPI String operator+(int i) const;
331  OPENMS_DLLAPI String operator+(unsigned int i) const;
333  OPENMS_DLLAPI String operator+(short int i) const;
335  OPENMS_DLLAPI String operator+(short unsigned int i) const;
337  OPENMS_DLLAPI String operator+(long int i) const;
339  OPENMS_DLLAPI String operator+(long unsigned int i) const;
341  OPENMS_DLLAPI String operator+(long long unsigned int i) const;
343  OPENMS_DLLAPI String operator+(float f) const;
345  OPENMS_DLLAPI String operator+(double d) const;
347  OPENMS_DLLAPI String operator+(long double ld) const;
349  OPENMS_DLLAPI String operator+(char c) const;
351  OPENMS_DLLAPI String operator+(const char* s) const;
353  OPENMS_DLLAPI String operator+(const String& s) const;
355  OPENMS_DLLAPI String operator+(const std::string& s) const;
357 
361  OPENMS_DLLAPI String& operator+=(int i);
364  OPENMS_DLLAPI String& operator+=(unsigned int i);
366  OPENMS_DLLAPI String& operator+=(short int i);
368  OPENMS_DLLAPI String& operator+=(short unsigned int i);
370  OPENMS_DLLAPI String& operator+=(long int i);
372  OPENMS_DLLAPI String& operator+=(long unsigned int i);
374  OPENMS_DLLAPI String& operator+=(long long unsigned int i);
376  OPENMS_DLLAPI String& operator+=(float f);
378  OPENMS_DLLAPI String& operator+=(double d);
380  OPENMS_DLLAPI String& operator+=(long double d);
382  OPENMS_DLLAPI String& operator+=(char c);
384  OPENMS_DLLAPI String& operator+=(const char* s);
386  OPENMS_DLLAPI String& operator+=(const String& s);
388  OPENMS_DLLAPI String& operator+=(const std::string& s);
390 
392  OPENMS_DLLAPI static String random(UInt length);
393 
395  OPENMS_DLLAPI static String number(double d, UInt n);
401  OPENMS_DLLAPI static String numberLength(double d, UInt n);
402 
403 
420  OPENMS_DLLAPI bool split(const char splitter, std::vector<String>& substrings, bool quote_protect = false) const;
421 
433  OPENMS_DLLAPI bool split(const String& splitter, std::vector<String>& substrings) const;
434 
449  OPENMS_DLLAPI bool split_quoted(const String& splitter, std::vector<String>& substrings,
450  char q = '"', QuotingMethod method = ESCAPE) const;
451 
457  template <class StringIterator>
458  void concatenate(StringIterator first, StringIterator last, const String& glue = "")
459  {
460  //empty container
461  if (first == last)
462  {
463  std::string::clear();
464  return;
465  }
466 
467  std::string::operator=(* first);
468  for (StringIterator it = ++first; it != last; ++it)
469  {
470  std::string::operator+=(glue + (*it));
471  }
472  }
473 
474  };
475 
480  class OPENMS_DLLAPI StringView
481  {
482  public:
483 
484  // create view on string
485  StringView() : begin_(), size_(0)
486  {
487  }
488 
489  // create view on string
490  StringView(const std::string& s) : begin_(s.data()), size_(s.size())
491  {
492  }
493 
494  // construct from other view
495  StringView(const StringView & s) : begin_(s.begin_), size_(s.size_)
496  {
497  }
498 
500  bool operator<(const StringView other) const
501  {
502  if (size_ < other.size_) return true;
503 
504  if (size_ > other.size_) return false;
505 
506  // same size
507  const char * b = begin_;
508  const char * bo = other.begin_;
509 
510  for (Size i = 0; i != size_; ++i, ++b, ++bo)
511  {
512  if (*b < *bo) return true;
513  if (*b > *bo) return false;
514  }
515 
516  return false;
517  }
518 
520  inline StringView substr(Size start_index, Size end_index) const
521  {
522  if (!size_) return *this;
523 
524  StringView sv(*this);
525  sv.begin_ = begin_ + start_index;
526  sv.size_ = end_index - start_index + 1;
527  return sv;
528  }
529 
531  inline Size size() const
532  {
533  return size_;
534  }
535 
537  inline String getString() const
538  {
539  if (!size_) return String();
540  return String(begin_, begin_ + size_);
541  }
542 
543  private:
544  const char * begin_;
546  };
547 
548 }// namespace OPENMS
549 
550 #endif // OPENMS_DATASTRUCTURES_STRING_H
String & simplify()
merges subsequent whitespaces to one blank character
String & fillRight(char c, UInt size)
Adds c on the right side until the size of the string is size.
QString toQString() const
Conversion to Qt QString.
bool has(Byte byte) const
true if String contains the byte, false otherwise
A more convenient string class.
Definition: String.h:57
const char * begin_
Definition: String.h:544
String & quote(char q='"', QuotingMethod method = ESCAPE)
Wraps the string in quotation marks.
String & toUpper()
Converts the string to uppercase.
bool operator<(const StringView other) const
less operator
Definition: String.h:500
Size size_
Definition: String.h:545
String()
Default constructor.
Definition: String.h:80
String & ensureLastChar(char end)
Makes sure the string ends with the character end.
unsigned int UInt
Unsigned integer type.
Definition: Types.h:95
STL namespace.
String & unquote(char q='"', QuotingMethod method = ESCAPE)
Reverses changes made by the quote method.
iterator Iterator
Iterator.
Definition: String.h:69
void concatenate(StringIterator first, StringIterator last, const String &glue="")
Concatenates all elements from first to last-1 and inserts glue between the elements.
Definition: String.h:458
bool split_quoted(const String &splitter, std::vector< String > &substrings, char q='"', QuotingMethod method = ESCAPE) const
Splits a string into substrings using splitter (the whole string) as delimiter, but does not split wi...
const double c
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
static String numberLength(double d, UInt n)
Returns a string with at maximum n characters for d.
String getString() const
create String object from view
Definition: String.h:537
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:57
String substr(size_t pos=0, size_t n=npos) const
Wrapper for the STL substr() method. Returns a String object with its contents initialized to a subst...
String(InputIterator first, InputIterator last)
Constructor from a char range.
Definition: String.h:103
QuotingMethod
How to handle embedded quotes when quoting strings.
Definition: String.h:80
const_iterator ConstIterator
Const Iterator.
Definition: String.h:71
String & reverse()
inverts the direction of the string
String suffix(SizeType length) const
returns the suffix of length length
Int toInt() const
Conversion to int.
StringView(const StringView &s)
Definition: String.h:495
double toDouble() const
Conversion to double.
StringView()
Definition: String.h:485
String & toLower()
Converts the string to lowercase.
Definition: String.h:80
StringView substr(Size start_index, Size end_index) const
create view that references a substring of the original string
Definition: String.h:520
String & trim()
removes whitespaces (space, tab, line feed, carriage return) at the beginning and the end of the stri...
String operator+(int i) const
Sum operator for an integer.
float toFloat() const
Conversion to float.
String & fillLeft(char c, UInt size)
Adds c on the left side until the size of the string is size.
reverse_iterator ReverseIterator
Reverse Iterator.
Definition: String.h:73
size_type SizeType
UInt type.
Definition: String.h:77
Definition: String.h:80
String & firstToUpper()
Converts the first letter of the string to uppercase.
static String random(UInt length)
returns a random string of the given length. It consists of [0-9a-zA-Z]
bool hasPrefix(const String &string) const
true if String begins with string, false otherwise
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:128
String & removeWhitespaces()
removes whitespaces (space, tab, line feed, carriage return)
bool hasSubstring(const String &string) const
true if String contains the string, false otherwise
const_reverse_iterator ConstReverseIterator
Const reverse Iterator.
Definition: String.h:75
String & substitute(char from, char to)
Replaces all occurrences of the character from by the character to.
String prefix(SizeType length) const
returns the prefix of length length
StringView(const std::string &s)
Definition: String.h:490
OPENMS_BYTE_TYPE Byte
Byte type.
Definition: Types.h:112
String chop(Size n) const
Returns a substring where n characters were removed from the end of the string.
String & operator+=(int i)
Sum operator for an integer.
int Int
Signed integer type.
Definition: Types.h:103
static const String EMPTY
Empty string for comparisons.
Definition: String.h:63
bool split(const char splitter, std::vector< String > &substrings, bool quote_protect=false) const
Splits a string into substrings using splitter as delimiter.
StringView provides a non-owning view on an existing string.
Definition: String.h:480
Size size() const
size of view
Definition: String.h:531
bool hasSuffix(const String &string) const
true if String ends with string, false otherwise
static String number(double d, UInt n)
returns a string for d with exactly n decimal places

OpenMS / TOPP release 2.3.0 Documentation generated on Tue Jan 9 2018 18:22:04 using doxygen 1.8.13