1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
6 #include "base/i2-base.hpp"
7 #include "base/object.hpp"
8 #include <boost/range/iterator.hpp>
19 * Rationale for having this: The std::string class has an ambiguous assignment
20 * operator when used in conjunction with the Value class.
25 typedef std::string::iterator Iterator;
26 typedef std::string::const_iterator ConstIterator;
28 typedef std::string::iterator iterator;
29 typedef std::string::const_iterator const_iterator;
31 typedef std::string::reverse_iterator ReverseIterator;
32 typedef std::string::const_reverse_iterator ConstReverseIterator;
34 typedef std::string::reverse_iterator reverse_iterator;
35 typedef std::string::const_reverse_iterator const_reverse_iterator;
37 typedef std::string::size_type SizeType;
40 String(const char *data);
41 String(std::string data);
42 String(String::SizeType n, char c);
43 String(const String& other);
44 String(String&& other);
47 String(Value&& other);
50 template<typename InputIterator>
51 String(InputIterator begin, InputIterator end)
55 String& operator=(const String& rhs);
56 String& operator=(String&& rhs);
57 String& operator=(Value&& rhs);
58 String& operator=(const std::string& rhs);
59 String& operator=(const char *rhs);
61 const char& operator[](SizeType pos) const;
62 char& operator[](SizeType pos);
64 String& operator+=(const String& rhs);
65 String& operator+=(const char *rhs);
66 String& operator+=(const Value& rhs);
67 String& operator+=(char rhs);
71 bool operator<(const String& rhs) const;
73 operator const std::string&() const;
75 const char *CStr() const;
79 SizeType GetLength() const;
81 std::string& GetData();
82 const std::string& GetData() const;
84 SizeType Find(const String& str, SizeType pos = 0) const;
85 SizeType RFind(const String& str, SizeType pos = NPos) const;
86 SizeType FindFirstOf(const char *s, SizeType pos = 0) const;
87 SizeType FindFirstOf(char ch, SizeType pos = 0) const;
88 SizeType FindFirstNotOf(const char *s, SizeType pos = 0) const;
89 SizeType FindFirstNotOf(char ch, SizeType pos = 0) const;
90 SizeType FindLastOf(const char *s, SizeType pos = NPos) const;
91 SizeType FindLastOf(char ch, SizeType pos = NPos) const;
93 String SubStr(SizeType first, SizeType len = NPos) const;
95 std::vector<String> Split(const char *separators) const;
97 void Replace(SizeType first, SizeType second, const String& str);
101 String ToLower() const;
103 String ToUpper() const;
105 String Reverse() const;
107 void Append(int count, char ch);
109 bool Contains(const String& str) const;
111 void swap(String& str);
113 Iterator erase(Iterator first, Iterator last);
115 template<typename InputIterator>
116 void insert(Iterator p, InputIterator first, InputIterator last)
118 m_Data.insert(p, first, last);
122 ConstIterator Begin() const;
124 ConstIterator End() const;
125 ReverseIterator RBegin();
126 ConstReverseIterator RBegin() const;
127 ReverseIterator REnd();
128 ConstReverseIterator REnd() const;
130 static const SizeType NPos;
132 static Object::Ptr GetPrototype();
138 std::ostream& operator<<(std::ostream& stream, const String& str);
139 std::istream& operator>>(std::istream& stream, String& str);
141 String operator+(const String& lhs, const String& rhs);
142 String operator+(const String& lhs, const char *rhs);
143 String operator+(const char *lhs, const String& rhs);
145 bool operator==(const String& lhs, const String& rhs);
146 bool operator==(const String& lhs, const char *rhs);
147 bool operator==(const char *lhs, const String& rhs);
149 bool operator<(const String& lhs, const char *rhs);
150 bool operator<(const char *lhs, const String& rhs);
152 bool operator>(const String& lhs, const String& rhs);
153 bool operator>(const String& lhs, const char *rhs);
154 bool operator>(const char *lhs, const String& rhs);
156 bool operator<=(const String& lhs, const String& rhs);
157 bool operator<=(const String& lhs, const char *rhs);
158 bool operator<=(const char *lhs, const String& rhs);
160 bool operator>=(const String& lhs, const String& rhs);
161 bool operator>=(const String& lhs, const char *rhs);
162 bool operator>=(const char *lhs, const String& rhs);
164 bool operator!=(const String& lhs, const String& rhs);
165 bool operator!=(const String& lhs, const char *rhs);
166 bool operator!=(const char *lhs, const String& rhs);
168 String::Iterator begin(String& x);
169 String::ConstIterator begin(const String& x);
170 String::Iterator end(String& x);
171 String::ConstIterator end(const String& x);
172 String::Iterator range_begin(String& x);
173 String::ConstIterator range_begin(const String& x);
174 String::Iterator range_end(String& x);
175 String::ConstIterator range_end(const String& x);
179 extern template class std::vector<icinga::String>;
185 struct range_mutable_iterator<icinga::String>
187 typedef icinga::String::Iterator type;
191 struct range_const_iterator<icinga::String>
193 typedef icinga::String::ConstIterator type;
198 #endif /* STRING_H */