zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
String.cpp
Go to the documentation of this file.
1 /* This file is part of the Zenipex Library (zenilib).
2  * Copyright (C) 2011 Mitchell Keith Bloch (bazald).
3  *
4  * zenilib is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * zenilib is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with zenilib. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include <zeni.h>
19 
20 #include <cctype>
21 #include <cstring>
22 #include <iostream>
23 
24 #if defined(_DEBUG) && defined(_WINDOWS)
25 #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
26 #define new DEBUG_NEW
27 #endif
28 
29 namespace Zeni {
30 
31  String::iterator::iterator() : m_impl(new std::string::iterator) {}
32  String::iterator::~iterator() {delete static_cast<std::string::iterator *>(m_impl);}
33 
34  String::iterator::iterator(const iterator &rhs) : m_impl(new std::string::iterator(*static_cast<const std::string::iterator * const>(rhs.m_impl))) {}
36  *static_cast<std::string::iterator *>(m_impl) = *static_cast<std::string::iterator *>(rhs.m_impl);
37  return *this;
38  }
39 
40  bool String::iterator::operator==(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) == *static_cast<const std::string::iterator *>(rhs.m_impl);}
41  bool String::iterator::operator!=(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) != *static_cast<const std::string::iterator *>(rhs.m_impl);}
42 
43  String::iterator::value_type String::iterator::operator*() const {return static_cast<const std::string::iterator * const>(m_impl)->operator*();}
44  String::iterator::value_type & String::iterator::operator*() {return static_cast<const std::string::iterator * const>(m_impl)->operator*();}
45  String::iterator::value_type String::iterator::operator->() const {return static_cast<const std::string::iterator * const>(m_impl)->operator*();}
46  String::iterator::value_type & String::iterator::operator->() {return static_cast<const std::string::iterator * const>(m_impl)->operator*();}
47 
49  static_cast<std::string::iterator *>(m_impl)->operator++();
50  return *this;
51  }
53  static_cast<std::string::iterator *>(m_impl)->operator--();
54  return *this;
55  }
57  static_cast<std::string::iterator *>(m_impl)->operator++(0);
58  return *this;
59  }
61  static_cast<std::string::iterator *>(m_impl)->operator--(0);
62  return *this;
63  }
64 
65  String::iterator String::iterator::operator+(const difference_type &n) const {return static_cast<const std::string::iterator * const>(m_impl)->operator+(n);}
66  String::iterator String::iterator::operator-(const difference_type &n) const {return static_cast<const std::string::iterator * const>(m_impl)->operator-(n);}
67  String::iterator::difference_type String::iterator::operator-(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) - *static_cast<const std::string::iterator * const>(rhs.m_impl);}
68 
69  bool String::iterator::operator<(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) < *static_cast<const std::string::iterator * const>(rhs.m_impl);}
70  bool String::iterator::operator>(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) > *static_cast<const std::string::iterator * const>(rhs.m_impl);}
71  bool String::iterator::operator<=(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) <= *static_cast<const std::string::iterator * const>(rhs.m_impl);}
72  bool String::iterator::operator>=(const iterator &rhs) const {return *static_cast<const std::string::iterator * const>(m_impl) >= *static_cast<const std::string::iterator * const>(rhs.m_impl);}
73 
75  static_cast<std::string::iterator *>(m_impl)->operator+=(n);
76  return *this;
77  }
79  static_cast<std::string::iterator *>(m_impl)->operator-=(n);
80  return *this;
81  }
82 
83  String::iterator::value_type String::iterator::operator[](const difference_type &n) const {return static_cast<const std::string::iterator * const>(m_impl)->operator[](n);}
84  String::iterator::value_type & String::iterator::operator[](const difference_type &n) {return static_cast<std::string::iterator *>(m_impl)->operator[](n);}
85 
86  String::iterator::iterator(const std::string::iterator &iter) : m_impl(new std::string::iterator(iter)) {}
87  String::iterator & String::iterator::operator=(const std::string::iterator &iter) {
88  String::iterator temp(iter);
89  std::swap(m_impl, temp.m_impl);
90  return *this;
91  }
92 
94  String::const_iterator::~const_iterator() {delete static_cast<std::string::const_iterator *>(m_impl);}
95 
96  String::const_iterator::const_iterator(const const_iterator &rhs) : m_impl(new std::string::const_iterator(*static_cast<const std::string::const_iterator * const>(rhs.m_impl))) {}
98  *static_cast<std::string::const_iterator *>(m_impl) = *static_cast<std::string::const_iterator *>(rhs.m_impl);
99  return *this;
100  }
101 
102  bool String::const_iterator::operator==(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) == *static_cast<const std::string::const_iterator *>(rhs.m_impl);}
103  bool String::const_iterator::operator!=(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) != *static_cast<const std::string::const_iterator *>(rhs.m_impl);}
104 
105  String::const_iterator::value_type String::const_iterator::operator*() const {return static_cast<const std::string::const_iterator * const>(m_impl)->operator*();}
106  String::const_iterator::value_type String::const_iterator::operator->() const {return static_cast<const std::string::const_iterator * const>(m_impl)->operator*();}
107 
109  static_cast<std::string::const_iterator *>(m_impl)->operator++();
110  return *this;
111  }
113  static_cast<std::string::const_iterator *>(m_impl)->operator--();
114  return *this;
115  }
117  static_cast<std::string::const_iterator *>(m_impl)->operator++(0);
118  return *this;
119  }
121  static_cast<std::string::const_iterator *>(m_impl)->operator--(0);
122  return *this;
123  }
124 
125  String::const_iterator String::const_iterator::operator+(const difference_type &n) const {return static_cast<const std::string::const_iterator * const>(m_impl)->operator+(n);}
126  String::const_iterator String::const_iterator::operator-(const difference_type &n) const {return static_cast<const std::string::const_iterator * const>(m_impl)->operator-(n);}
127  String::const_iterator::difference_type String::const_iterator::operator-(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) - *static_cast<const std::string::const_iterator * const>(rhs.m_impl);}
128 
129  bool String::const_iterator::operator<(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) < *static_cast<const std::string::const_iterator * const>(rhs.m_impl);}
130  bool String::const_iterator::operator>(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) > *static_cast<const std::string::const_iterator * const>(rhs.m_impl);}
131  bool String::const_iterator::operator<=(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) <= *static_cast<const std::string::const_iterator * const>(rhs.m_impl);}
132  bool String::const_iterator::operator>=(const const_iterator &rhs) const {return *static_cast<const std::string::const_iterator * const>(m_impl) >= *static_cast<const std::string::const_iterator * const>(rhs.m_impl);}
133 
135  static_cast<std::string::const_iterator *>(m_impl)->operator+=(n);
136  return *this;
137  }
139  static_cast<std::string::const_iterator *>(m_impl)->operator-=(n);
140  return *this;
141  }
142 
143  String::const_iterator::value_type String::const_iterator::operator[](const difference_type &n) const {return static_cast<const std::string::const_iterator * const>(m_impl)->operator[](n);}
144 
145  String::const_iterator::const_iterator(const std::string::const_iterator &iter) : m_impl(new std::string::const_iterator(iter)) {}
146  String::const_iterator & String::const_iterator::operator=(const std::string::const_iterator &iter) {
147  String::const_iterator temp(iter);
148  std::swap(m_impl, temp.m_impl);
149  return *this;
150  }
151 
153  String::reverse_iterator::~reverse_iterator() {delete static_cast<std::string::reverse_iterator *>(m_impl);}
154 
155  String::reverse_iterator::reverse_iterator(const reverse_iterator &rhs) : m_impl(new std::string::reverse_iterator(*static_cast<const std::string::reverse_iterator * const>(rhs.m_impl))) {}
157  *static_cast<std::string::reverse_iterator *>(m_impl) = *static_cast<std::string::reverse_iterator *>(rhs.m_impl);
158  return *this;
159  }
160 
161  bool String::reverse_iterator::operator==(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) == *static_cast<const std::string::reverse_iterator *>(rhs.m_impl);}
162  bool String::reverse_iterator::operator!=(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) != *static_cast<const std::string::reverse_iterator *>(rhs.m_impl);}
163 
164  String::reverse_iterator::value_type String::reverse_iterator::operator*() const {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator*();}
165  String::reverse_iterator::value_type & String::reverse_iterator::operator*() {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator*();}
166  String::reverse_iterator::value_type String::reverse_iterator::operator->() const {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator*();}
167  String::reverse_iterator::value_type & String::reverse_iterator::operator->() {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator*();}
168 
170  static_cast<std::string::reverse_iterator *>(m_impl)->operator++();
171  return *this;
172  }
174  static_cast<std::string::reverse_iterator *>(m_impl)->operator--();
175  return *this;
176  }
178  static_cast<std::string::reverse_iterator *>(m_impl)->operator++(0);
179  return *this;
180  }
182  static_cast<std::string::reverse_iterator *>(m_impl)->operator--(0);
183  return *this;
184  }
185 
186  String::reverse_iterator String::reverse_iterator::operator+(const difference_type &n) const {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator+(n);}
187  String::reverse_iterator String::reverse_iterator::operator-(const difference_type &n) const {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator-(n);}
188  String::reverse_iterator::difference_type String::reverse_iterator::operator-(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) - *static_cast<const std::string::reverse_iterator * const>(rhs.m_impl);}
189 
190  bool String::reverse_iterator::operator<(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) < *static_cast<const std::string::reverse_iterator * const>(rhs.m_impl);}
191  bool String::reverse_iterator::operator>(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) > *static_cast<const std::string::reverse_iterator * const>(rhs.m_impl);}
192  bool String::reverse_iterator::operator<=(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) <= *static_cast<const std::string::reverse_iterator * const>(rhs.m_impl);}
193  bool String::reverse_iterator::operator>=(const reverse_iterator &rhs) const {return *static_cast<const std::string::reverse_iterator * const>(m_impl) >= *static_cast<const std::string::reverse_iterator * const>(rhs.m_impl);}
194 
196  static_cast<std::string::reverse_iterator *>(m_impl)->operator+=(n);
197  return *this;
198  }
200  static_cast<std::string::reverse_iterator *>(m_impl)->operator-=(n);
201  return *this;
202  }
203 
204  String::reverse_iterator::value_type String::reverse_iterator::operator[](const difference_type &n) const {return static_cast<const std::string::reverse_iterator * const>(m_impl)->operator[](n);}
205  String::reverse_iterator::value_type & String::reverse_iterator::operator[](const difference_type &n) {return static_cast<std::string::reverse_iterator *>(m_impl)->operator[](n);}
206 
207  String::reverse_iterator::reverse_iterator(const std::string::reverse_iterator &iter) : m_impl(new std::string::reverse_iterator(iter)) {}
208  String::reverse_iterator & String::reverse_iterator::operator=(const std::string::reverse_iterator &iter) {
209  String::reverse_iterator temp(iter);
210  std::swap(m_impl, temp.m_impl);
211  return *this;
212  }
213 
215  String::const_reverse_iterator::~const_reverse_iterator() {delete static_cast<std::string::const_reverse_iterator *>(m_impl);}
216 
219  *static_cast<std::string::const_reverse_iterator *>(m_impl) = *static_cast<std::string::const_reverse_iterator *>(rhs.m_impl);
220  return *this;
221  }
222 
223  bool String::const_reverse_iterator::operator==(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) == *static_cast<const std::string::const_reverse_iterator *>(rhs.m_impl);}
224  bool String::const_reverse_iterator::operator!=(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) != *static_cast<const std::string::const_reverse_iterator *>(rhs.m_impl);}
225 
226  String::const_reverse_iterator::value_type String::const_reverse_iterator::operator*() const {return static_cast<const std::string::const_reverse_iterator * const>(m_impl)->operator*();}
227  String::const_reverse_iterator::value_type String::const_reverse_iterator::operator->() const {return static_cast<const std::string::const_reverse_iterator * const>(m_impl)->operator*();}
228 
230  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator++();
231  return *this;
232  }
234  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator--();
235  return *this;
236  }
238  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator++(0);
239  return *this;
240  }
242  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator--(0);
243  return *this;
244  }
245 
246  String::const_reverse_iterator String::const_reverse_iterator::operator+(const difference_type &n) const {return static_cast<const std::string::const_reverse_iterator * const>(m_impl)->operator+(n);}
247  String::const_reverse_iterator String::const_reverse_iterator::operator-(const difference_type &n) const {return static_cast<const std::string::const_reverse_iterator * const>(m_impl)->operator-(n);}
248  String::const_reverse_iterator::difference_type String::const_reverse_iterator::operator-(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) - *static_cast<const std::string::const_reverse_iterator * const>(rhs.m_impl);}
249 
250  bool String::const_reverse_iterator::operator<(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) < *static_cast<const std::string::const_reverse_iterator * const>(rhs.m_impl);}
251  bool String::const_reverse_iterator::operator>(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) > *static_cast<const std::string::const_reverse_iterator * const>(rhs.m_impl);}
252  bool String::const_reverse_iterator::operator<=(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) <= *static_cast<const std::string::const_reverse_iterator * const>(rhs.m_impl);}
253  bool String::const_reverse_iterator::operator>=(const const_reverse_iterator &rhs) const {return *static_cast<const std::string::const_reverse_iterator * const>(m_impl) >= *static_cast<const std::string::const_reverse_iterator * const>(rhs.m_impl);}
254 
256  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator+=(n);
257  return *this;
258  }
260  static_cast<std::string::const_reverse_iterator *>(m_impl)->operator-=(n);
261  return *this;
262  }
263 
264  String::const_reverse_iterator::value_type String::const_reverse_iterator::operator[](const difference_type &n) const {return static_cast<const std::string::const_reverse_iterator * const>(m_impl)->operator[](n);}
265 
266  String::const_reverse_iterator::const_reverse_iterator(const std::string::const_reverse_iterator &iter) : m_impl(new std::string::const_reverse_iterator(iter)) {}
267  String::const_reverse_iterator & String::const_reverse_iterator::operator=(const std::string::const_reverse_iterator &iter) {
269  std::swap(m_impl, temp.m_impl);
270  return *this;
271  }
272 
273  String::String() : m_impl(new std::string) {}
274  String::String(const String &str) : m_impl(new std::string(*static_cast<std::string *>(str.m_impl))) {}
275  String::String(const String &str, size_t pos, size_t n) : m_impl(new std::string(*static_cast<std::string *>(str.m_impl), pos, n)) {}
276  String::String(const char * s, size_t n) : m_impl(new std::string(s, n)) {}
277  String::String(const char * s) : m_impl(new std::string(s)) {}
278  String::String(size_t n, char c) : m_impl(new std::string(n, c)) {}
279 
280  String::~String() {delete static_cast<std::string *>(m_impl);}
281 
283  String temp(str);
284  swap(temp);
285  return *this;
286  }
287  String & String::operator=(const char *s) {
288  String temp(s);
289  swap(temp);
290  return *this;
291  }
293  String temp(1, c);
294  swap(temp);
295  return *this;
296  }
297 
298  String::iterator String::begin() {return static_cast<std::string *>(m_impl)->begin();}
299  String::const_iterator String::begin() const {return static_cast<const std::string * const>(m_impl)->begin();}
300 
301  String::iterator String::end() {return static_cast<std::string *>(m_impl)->end();}
302  String::const_iterator String::end() const {return static_cast<const std::string * const>(m_impl)->end();}
303 
304  String::reverse_iterator String::rbegin() {return static_cast<std::string *>(m_impl)->rbegin();}
305  String::const_reverse_iterator String::rbegin() const {return static_cast<const std::string * const>(m_impl)->rbegin();}
306 
307  String::reverse_iterator String::rend() {return static_cast<std::string *>(m_impl)->rend();}
308  String::const_reverse_iterator String::rend() const {return static_cast<const std::string * const>(m_impl)->rend();}
309 
310  size_t String::size() const {return static_cast<std::string *>(m_impl)->size();}
311 
312  size_t String::length() const {return static_cast<std::string *>(m_impl)->length();}
313 
314  size_t String::max_size() const {return static_cast<std::string *>(m_impl)->max_size();}
315 
316  void String::resize(size_t n, char c) {static_cast<std::string *>(m_impl)->resize(n, c);}
317  void String::resize(size_t n) {static_cast<std::string *>(m_impl)->resize(n);}
318 
319  size_t String::capacity() const {return static_cast<std::string *>(m_impl)->capacity();}
320 
321  void String::reserve(size_t res_arg) {static_cast<std::string *>(m_impl)->reserve(res_arg);}
322 
323  void String::clear() {static_cast<std::string *>(m_impl)->clear();}
324 
325  bool String::empty() const {return static_cast<std::string *>(m_impl)->empty();}
326 
327  String::value_type String::operator[](const unsigned int &pos) const {return static_cast<const std::string * const>(m_impl)->operator[](pos);}
328  String::value_type & String::operator[](const unsigned int &pos) {return static_cast<std::string *>(m_impl)->operator[](pos);}
329 
330  String::value_type String::at(size_t pos) const {return static_cast<const std::string * const>(m_impl)->at(pos);}
331  String::value_type & String::at(size_t pos) {return static_cast<std::string *>(m_impl)->at(pos);}
332 
334  *static_cast<std::string *>(m_impl) += *static_cast<std::string *>(str.m_impl);
335  return *this;
336  }
337  String & String::operator+=(const char *s) {
338  *static_cast<std::string *>(m_impl) += s;
339  return *this;
340  }
342  *static_cast<std::string *>(m_impl) += c;
343  return *this;
344  }
345 
347  static_cast<std::string *>(m_impl)->append(*static_cast<std::string *>(str.m_impl));
348  return *this;
349  }
350  String & String::append(const String &str, size_t pos, size_t n) {
351  static_cast<std::string *>(m_impl)->append(*static_cast<std::string *>(str.m_impl), pos, n);
352  return *this;
353  }
354  String & String::append(const char *s, size_t n) {
355  static_cast<std::string *>(m_impl)->append(s, n);
356  return *this;
357  }
358  String & String::append(const char *s) {
359  static_cast<std::string *>(m_impl)->append(s);
360  return *this;
361  }
362  String & String::append(size_t n, char c) {
363  static_cast<std::string *>(m_impl)->append(n, c);
364  return *this;
365  }
366 
367  void String::push_back(char c) {static_cast<std::string *>(m_impl)->push_back(c);}
368 
370  static_cast<std::string *>(m_impl)->assign(*static_cast<std::string *>(str.m_impl));
371  return *this;
372  }
373  String & String::assign(const String &str, size_t pos, size_t n) {
374  static_cast<std::string *>(m_impl)->assign(*static_cast<std::string *>(str.m_impl), pos, n);
375  return *this;
376  }
377  String & String::assign(const char *s, size_t n) {
378  static_cast<std::string *>(m_impl)->assign(s, n);
379  return *this;
380  }
381  String & String::assign(const char *s) {
382  static_cast<std::string *>(m_impl)->assign(s);
383  return *this;
384  }
385  String & String::assign(size_t n, char c) {
386  static_cast<std::string *>(m_impl)->assign(n, c);
387  return *this;
388  }
389 
390  String & String::insert(size_t pos1, const String &str) {
391  static_cast<std::string *>(m_impl)->insert(pos1, *static_cast<std::string *>(str.m_impl));
392  return *this;
393  }
394  String & String::insert(size_t pos1, const String &str, size_t pos2, size_t n) {
395  static_cast<std::string *>(m_impl)->insert(pos1, *static_cast<std::string *>(str.m_impl), pos2, n);
396  return *this;
397  }
398  String & String::insert(size_t pos1, const char *s, size_t n) {
399  static_cast<std::string *>(m_impl)->insert(pos1, s, n);
400  return *this;
401  }
402  String & String::insert(size_t pos1, const char *s) {
403  static_cast<std::string *>(m_impl)->insert(pos1, s);
404  return *this;
405  }
406  String & String::insert(size_t pos1, size_t n, char c) {
407  static_cast<std::string *>(m_impl)->insert(pos1, n, c);
408  return *this;
409  }
411  return static_cast<std::string *>(m_impl)->insert(*static_cast<std::string::iterator *>(p.m_impl), c);
412  }
413  void String::insert(iterator p, size_t n, char c) {
414  static_cast<std::string *>(m_impl)->insert(*static_cast<std::string::iterator *>(p.m_impl), n, c);
415  }
416 
417  String & String::erase(size_t pos, size_t n) {
418  static_cast<std::string *>(m_impl)->erase(pos, n);
419  return *this;
420  }
422  return static_cast<std::string *>(m_impl)->erase(*static_cast<std::string::iterator *>(position.m_impl));
423  }
425  return static_cast<std::string *>(m_impl)->erase(*static_cast<std::string::iterator *>(first.m_impl), *static_cast<std::string::iterator *>(last.m_impl));
426  }
427 
428  String & String::replace(size_t pos1, size_t n1, const String &str) {
429  static_cast<std::string *>(m_impl)->replace(pos1, n1, *static_cast<std::string *>(str.m_impl));
430  return *this;
431  }
433  static_cast<std::string *>(m_impl)->replace(*static_cast<std::string::iterator *>(i1.m_impl), *static_cast<std::string::iterator *>(i2.m_impl), *static_cast<const std::string * const>(str.m_impl));
434  return *this;
435  }
436  String & String::replace(size_t pos1, size_t n1, const String &str, size_t pos2, size_t n2) {
437  static_cast<std::string *>(m_impl)->replace(pos1, n1, *static_cast<std::string *>(str.m_impl), pos2, n2);
438  return *this;
439  }
440  String & String::replace(size_t pos1, size_t n1, const char *s, size_t n2) {
441  static_cast<std::string *>(m_impl)->replace(pos1, n1, s, n2);
442  return *this;
443  }
444  String & String::replace(iterator i1, iterator i2, const char *s, size_t n2) {
445  static_cast<std::string *>(m_impl)->replace(*static_cast<std::string::iterator *>(i1.m_impl), *static_cast<std::string::iterator *>(i2.m_impl), s, n2);
446  return *this;
447  }
448  String & String::replace(size_t pos1, size_t n1, const char *s) {
449  static_cast<std::string *>(m_impl)->replace(pos1, n1, s);
450  return *this;
451  }
453  static_cast<std::string *>(m_impl)->replace(*static_cast<std::string::iterator *>(i1.m_impl), *static_cast<std::string::iterator *>(i2.m_impl), s);
454  return *this;
455  }
456  String & String::replace(size_t pos1, size_t n1, size_t n2, char c) {
457  static_cast<std::string *>(m_impl)->replace(pos1, n1, n2, c);
458  return *this;
459  }
460  String & String::replace(iterator i1, iterator i2, size_t n2, char c) {
461  static_cast<std::string *>(m_impl)->replace(*static_cast<std::string::iterator *>(i1.m_impl), *static_cast<std::string::iterator *>(i2.m_impl), n2, c);
462  return *this;
463  }
464 
465  void String::swap(String &str) {std::swap(m_impl, str.m_impl);}
466 
467  const char * String::c_str() const {return static_cast<std::string *>(m_impl)->c_str();}
468 
469  const char * String::data() const {return static_cast<std::string *>(m_impl)->data();}
470 
471 #ifdef _WINDOWS
472 #pragma warning( push )
473 #pragma warning( disable : 4996 )
474 #endif
475  size_t String::copy(char *s, size_t n, size_t pos) const {return static_cast<std::string *>(m_impl)->copy(s, n, pos);}
476 #ifdef _WINDOWS
477 #pragma warning( pop )
478 #endif
479 
480  size_t String::find(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->find(*static_cast<std::string *>(str.m_impl), pos);}
481  size_t String::find(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->find(s, pos, n);}
482  size_t String::find(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->find(s, pos);}
483  size_t String::find(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->find(c, pos);}
484 
485  size_t String::rfind(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->rfind(*static_cast<std::string *>(str.m_impl), pos);}
486  size_t String::rfind(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->rfind(s, pos, n);}
487  size_t String::rfind(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->rfind(s, pos);}
488  size_t String::rfind(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->rfind(c, pos);}
489 
490  size_t String::find_first_of(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_of(*static_cast<std::string *>(str.m_impl), pos);}
491  size_t String::find_first_of(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->find_first_of(s, pos, n);}
492  size_t String::find_first_of(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_of(s, pos);}
493  size_t String::find_first_of(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_of(c, pos);}
494 
495  size_t String::find_last_of(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_of(*static_cast<std::string *>(str.m_impl), pos);}
496  size_t String::find_last_of(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->find_last_of(s, pos, n);}
497  size_t String::find_last_of(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_of(s, pos);}
498  size_t String::find_last_of(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_of(c, pos);}
499 
500  size_t String::find_first_not_of(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_not_of(*static_cast<std::string *>(str.m_impl), pos);}
501  size_t String::find_first_not_of(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->find_first_not_of(s, pos, n);}
502  size_t String::find_first_not_of(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_not_of(s, pos);}
503  size_t String::find_first_not_of(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->find_first_not_of(c, pos);}
504 
505  size_t String::find_last_not_of(const String &str, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_not_of(*static_cast<std::string *>(str.m_impl), pos);}
506  size_t String::find_last_not_of(const char *s, size_t pos, size_t n) const {return static_cast<std::string *>(m_impl)->find_last_not_of(s, pos, n);}
507  size_t String::find_last_not_of(const char *s, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_not_of(s, pos);}
508  size_t String::find_last_not_of(char c, size_t pos) const {return static_cast<std::string *>(m_impl)->find_last_not_of(c, pos);}
509 
510  String String::substr(size_t pos, size_t n) const {return String(static_cast<std::string *>(m_impl)->substr(pos, n));}
511 
512  int String::compare(const String &str) const {return static_cast<std::string *>(m_impl)->compare(*static_cast<std::string *>(str.m_impl));}
513  int String::compare(const char *s) const {return static_cast<std::string *>(m_impl)->compare(s);}
514  int String::compare(size_t pos1, size_t n1, const String &str) const {return static_cast<std::string *>(m_impl)->compare(pos1, n1, *static_cast<std::string *>(str.m_impl));}
515  int String::compare(size_t pos1, size_t n1, const char *s) const {return static_cast<std::string *>(m_impl)->compare(pos1, n1, s);}
516  int String::compare(size_t pos1, size_t n1, const String &str, size_t pos2, size_t n2) const {return static_cast<std::string *>(m_impl)->compare(pos1, n1, *static_cast<std::string *>(str.m_impl), pos2, n2);}
517  int String::compare(size_t pos1, size_t n1, const char *s, size_t n2) const {return static_cast<std::string *>(m_impl)->compare(pos1, n1, s, n2);}
518 
519  bool String::operator==(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) == *static_cast<const std::string * const>(rhs.m_impl);}
520  bool String::operator==(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) == rhs;}
521  bool String::operator!=(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) != *static_cast<const std::string * const>(rhs.m_impl);}
522  bool String::operator!=(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) != rhs;}
523  bool String::operator<(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) < *static_cast<const std::string * const>(rhs.m_impl);}
524  bool String::operator<(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) < rhs;}
525  bool String::operator>(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) > *static_cast<const std::string * const>(rhs.m_impl);}
526  bool String::operator>(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) > rhs;}
527  bool String::operator<=(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) <= *static_cast<const std::string * const>(rhs.m_impl);}
528  bool String::operator<=(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) <= rhs;}
529  bool String::operator>=(const Zeni::String &rhs) const {return *static_cast<const std::string * const>(m_impl) >= *static_cast<const std::string * const>(rhs.m_impl);}
530  bool String::operator>=(const char *rhs) const {return *static_cast<const std::string * const>(m_impl) >= rhs;}
531 
532  size_t String::Hash::operator()(const String &str) const {
533  size_t val = 42u;
534  for(const_iterator it = str.begin(), iend = str.end(); it != iend; ++it)
535  val = ((val << 5) | (val >> (8u * sizeof(size_t) - 5))) + static_cast<unsigned int>(*it);
536  return val;
537  }
538 
539  bool String::Hash::operator()(const String &lhs, const String &rhs) const {
540  return lhs != rhs;
541  }
542 
543 }
544 
549 
550 ZENI_DLL Zeni::String operator+(const Zeni::String &lhs, const Zeni::String &rhs) {
551  Zeni::String rv(lhs);
552  return rv += rhs;
553 }
554 ZENI_DLL Zeni::String operator+(const Zeni::String &lhs, const char *rhs) {
555  Zeni::String rv(lhs);
556  return rv += rhs;
557 }
558 ZENI_DLL Zeni::String operator+(const Zeni::String &lhs, char rhs) {
559  Zeni::String rv(lhs);
560  return rv += rhs;
561 }
562 ZENI_DLL Zeni::String operator+(const char *lhs, const Zeni::String &rhs) {
563  Zeni::String rv(lhs);
564  return rv += rhs;
565 }
566 ZENI_DLL Zeni::String operator+(char lhs, const Zeni::String &rhs) {
567  Zeni::String rv(1, lhs);
568  return rv += rhs;
569 }
570 
571 ZENI_DLL bool operator==(const char *lhs, const Zeni::String &rhs) {return rhs == lhs;}
572 ZENI_DLL bool operator!=(const char *lhs, const Zeni::String &rhs) {return rhs != lhs;}
573 ZENI_DLL bool operator<(const char *lhs, const Zeni::String &rhs) {return rhs >= lhs;}
574 ZENI_DLL bool operator>(const char *lhs, const Zeni::String &rhs) {return rhs <= lhs;}
575 ZENI_DLL bool operator<=(const char *lhs, const Zeni::String &rhs) {return rhs > lhs;}
576 ZENI_DLL bool operator>=(const char *lhs, const Zeni::String &rhs) {return rhs < lhs;}
577 
578 ZENI_DLL void swap(Zeni::String &lhs, Zeni::String &rhs) {
579  lhs.swap(rhs);
580 }
581 
582 std::istream & operator>>(std::istream &is, Zeni::String &str) {
583  Zeni::String temp;
584 
585  if(is >> std::ws)
586  while(is && !std::isspace(is.peek()))
587  temp += (char)is.get();
588 
589  str.swap(temp);
590 
591  return is;
592 }
593 
594 std::ostream & operator<<(std::ostream &os, const Zeni::String &str) {
595  for(Zeni::String::const_iterator it = str.begin(), iend = str.end(); os && it != iend; ++it)
596  os.put(*it);
597 
598  return os;
599 }
bool operator!=(const reverse_iterator &rhs) const
Definition: String.cpp:162
const_iterator operator--()
Definition: String.cpp:112
bool operator!=(const const_reverse_iterator &rhs) const
Definition: String.cpp:224
ptrdiff_t difference_type
Definition: String.h:43
bool operator>(const const_reverse_iterator &rhs) const
Definition: String.cpp:251
GLuint const GLfloat * val
Definition: glew.h:2715
bool operator==(const const_iterator &rhs) const
Definition: String.cpp:102
String & append(const String &str)
Definition: String.cpp:346
GLdouble s
Definition: glew.h:1376
iterator operator-(const difference_type &n) const
Definition: String.cpp:66
bool operator>(const TiXmlString &a, const TiXmlString &b)
Definition: tinystr.h:279
bool operator>=(const const_reverse_iterator &rhs) const
Definition: String.cpp:253
void clear()
Definition: String.cpp:323
bool operator==(const reverse_iterator &rhs) const
Definition: String.cpp:161
size_t find_last_of(const String &str, size_t pos=npos) const
Definition: String.cpp:495
bool operator<(const iterator &rhs) const
Definition: String.cpp:69
reverse_iterator operator-(const difference_type &n) const
Definition: String.cpp:187
const_reverse_iterator operator-=(const difference_type &n)
Definition: String.cpp:259
size_t find_first_of(const String &str, size_t pos=0) const
Definition: String.cpp:490
String & replace(size_t pos1, size_t n1, const String &str)
Definition: String.cpp:428
size_t find(const String &str, size_t pos=0) const
Definition: String.cpp:480
bool operator!=(const iterator &rhs) const
Definition: String.cpp:41
bool operator<(const TiXmlString &a, const TiXmlString &b)
Definition: tinystr.h:273
char value_type
Definition: String.h:33
iterator operator-=(const difference_type &n)
Definition: String.cpp:78
bool operator!=(const Zeni::String &rhs) const
Definition: String.cpp:521
reverse_iterator operator+=(const difference_type &n)
Definition: String.cpp:195
bool operator==(const SourceLocation &lhs, const SourceLocation &rhs)
size_t operator()(const String &str) const
Definition: String.cpp:532
size_t capacity() const
Definition: String.cpp:319
const_reverse_iterator operator+=(const difference_type &n)
Definition: String.cpp:255
bool operator>=(const iterator &rhs) const
Definition: String.cpp:72
GLclampd n
Definition: glew.h:7287
bool empty() const
Definition: String.cpp:325
reverse_iterator rbegin()
Definition: String.cpp:304
const_iterator operator++()
Definition: String.cpp:108
const_iterator operator-=(const difference_type &n)
Definition: String.cpp:138
bool operator>=(const Zeni::String &rhs) const
Definition: String.cpp:529
bool operator<=(const iterator &rhs) const
Definition: String.cpp:71
value_type operator->() const
Definition: String.cpp:166
TiXmlString operator+(const TiXmlString &a, const TiXmlString &b)
Definition: tinystr.cpp:86
const char * c_str() const
Definition: String.cpp:467
std::istream & operator>>(std::istream &is, Zeni::String &str)
Definition: String.cpp:582
value_type operator*() const
Definition: String.cpp:164
const_reverse_iterator & operator=(const const_reverse_iterator &rhs)
Definition: String.cpp:218
bool operator<(const Zeni::String &rhs) const
Definition: String.cpp:523
value_type at(size_t pos) const
Definition: String.cpp:330
bool operator==(const Zeni::String &rhs) const
Definition: String.cpp:519
bool operator<(const reverse_iterator &rhs) const
Definition: String.cpp:190
void resize(size_t n, char c)
Definition: String.cpp:316
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint GLint i2
Definition: SDL_glfuncs.h:118
value_type operator->() const
Definition: String.cpp:45
value_type operator[](const difference_type &n) const
Definition: String.cpp:83
String substr(size_t pos=0, size_t n=npos) const
Definition: String.cpp:510
const_reverse_iterator operator--()
Definition: String.cpp:233
reverse_iterator operator+(const difference_type &n) const
Definition: String.cpp:186
void reserve(size_t res_arg=0)
Definition: String.cpp:321
size_t max_size() const
Definition: String.cpp:314
const_iterator operator-(const difference_type &n) const
Definition: String.cpp:126
void swap(String &str)
Definition: String.cpp:465
void push_back(char c)
Definition: String.cpp:367
bool operator>=(const const_iterator &rhs) const
Definition: String.cpp:132
reverse_iterator rend()
Definition: String.cpp:307
bool operator>(const Zeni::String &rhs) const
Definition: String.cpp:525
ALuint u
Definition: alMain.h:58
GLint first
Definition: gl2ext.h:1011
const_reverse_iterator operator+(const difference_type &n) const
Definition: String.cpp:246
iterator operator++()
Definition: String.cpp:48
String & operator=(const String &str)
Definition: String.cpp:282
const_iterator operator+=(const difference_type &n)
Definition: String.cpp:134
iterator end()
Definition: String.cpp:301
value_type operator[](const difference_type &n) const
Definition: String.cpp:143
size_t find_last_not_of(const String &str, size_t pos=npos) const
Definition: String.cpp:505
String & erase(size_t pos=0, size_t n=npos)
Definition: String.cpp:417
bool operator==(const iterator &rhs) const
Definition: String.cpp:40
GLfloat GLfloat p
Definition: glew.h:14938
value_type operator*() const
Definition: String.cpp:43
const_reverse_iterator operator-(const difference_type &n) const
Definition: String.cpp:247
const GLfloat * c
Definition: glew.h:14913
size_t copy(char *s, size_t n, size_t pos=0) const
Definition: String.cpp:475
value_type operator[](const unsigned int &pos) const
Definition: String.cpp:327
iterator begin()
Definition: String.cpp:298
value_type operator->() const
Definition: String.cpp:227
value_type operator[](const difference_type &n) const
Definition: String.cpp:264
size_t rfind(const String &str, size_t pos=npos) const
Definition: String.cpp:485
const char * data() const
Definition: String.cpp:469
size_t find_first_not_of(const String &str, size_t pos=0) const
Definition: String.cpp:500
bool operator!=(const SourceLocation &lhs, const SourceLocation &rhs)
value_type operator->() const
Definition: String.cpp:106
bool operator<(const const_iterator &rhs) const
Definition: String.cpp:129
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint i1
Definition: SDL_glfuncs.h:118
std::ostream & operator<<(std::ostream &out, const Token &token)
Definition: Token.cpp:74
const_iterator operator+(const difference_type &n) const
Definition: String.cpp:125
reverse_iterator & operator=(const reverse_iterator &rhs)
Definition: String.cpp:156
#define const
Definition: zconf.h:91
bool operator==(const const_reverse_iterator &rhs) const
Definition: String.cpp:223
value_type operator[](const difference_type &n) const
Definition: String.cpp:204
String & operator+=(const String &str)
Definition: String.cpp:333
bool operator>=(const TiXmlString &a, const TiXmlString &b)
Definition: tinystr.h:281
reverse_iterator operator-=(const difference_type &n)
Definition: String.cpp:199
bool operator<=(const const_iterator &rhs) const
Definition: String.cpp:131
void swap(Zeni::String &lhs, Zeni::String &rhs)
Definition: String.cpp:578
iterator operator+=(const difference_type &n)
Definition: String.cpp:74
bool operator>(const reverse_iterator &rhs) const
Definition: String.cpp:191
GLsizei const GLcharARB ** string
Definition: glew.h:5638
bool operator<=(const const_reverse_iterator &rhs) const
Definition: String.cpp:252
reverse_iterator operator++()
Definition: String.cpp:169
String & insert(size_t pos1, const String &str)
Definition: String.cpp:390
bool operator<(const const_reverse_iterator &rhs) const
Definition: String.cpp:250
size_t size() const
Definition: String.cpp:310
bool operator>(const iterator &rhs) const
Definition: String.cpp:70
bool operator>(const const_iterator &rhs) const
Definition: String.cpp:130
bool operator<=(const Zeni::String &rhs) const
Definition: String.cpp:527
value_type operator*() const
Definition: String.cpp:226
iterator & operator=(const iterator &rhs)
Definition: String.cpp:35
const_reverse_iterator operator++()
Definition: String.cpp:229
#define str(s)
reverse_iterator operator--()
Definition: String.cpp:173
bool operator<=(const TiXmlString &a, const TiXmlString &b)
Definition: tinystr.h:280
iterator operator--()
Definition: String.cpp:52
const_iterator & operator=(const const_iterator &rhs)
Definition: String.cpp:97
bool operator!=(const const_iterator &rhs) const
Definition: String.cpp:103
iterator operator+(const difference_type &n) const
Definition: String.cpp:65
String & assign(const String &str)
Definition: String.cpp:369
int compare(const String &str) const
Definition: String.cpp:512
bool operator<=(const reverse_iterator &rhs) const
Definition: String.cpp:192
bool operator>=(const reverse_iterator &rhs) const
Definition: String.cpp:193
size_t length() const
Definition: String.cpp:312
unsigned int size_t
value_type operator*() const
Definition: String.cpp:105