00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef ACEDIA_STRING_H
00031 #define ACEDIA_STRING_H
00032
00033 #include <list>
00034 #include <string>
00035 #include <boost/cstdint.hpp>
00036 #include <boost/archive/text_oarchive.hpp>
00037 #include <boost/archive/text_iarchive.hpp>
00038
00039 namespace acedia
00040 {
00041
00042
00043 namespace details { class shared_string; }
00044
00049 class String
00050 {
00051
00052 details::shared_string *str;
00053
00054
00055 void detach();
00056
00057 public:
00058
00059 typedef std::string::const_iterator const_iterator;
00060
00064 String();
00065
00072 String(const String &other);
00073
00077 String(const std::string &str);
00078
00082 String(const char *cstr);
00083
00087 String(const char *cstr, ::size_t n);
00088
00089 ~String();
00090
00094 ::size_t length() const;
00095
00099 inline ::size_t size() const { return length(); }
00100
00104 const char &operator[](::size_t pos) const;
00105
00109 inline const char &at(::size_t pos) const { return (*this)[pos]; }
00110
00114 const char *c_str() const;
00115
00119 bool empty() const;
00120
00124 const std::string &const_str() const;
00125
00129
00130
00131 inline bool operator<(const String &other) const
00132 {
00133 return const_str() < other.const_str();
00134 }
00135
00136 inline bool operator<=(const String &other) const
00137 {
00138 return const_str() <= other.const_str();
00139 }
00140
00141 inline bool operator>(const String &other) const
00142 {
00143 return const_str() > other.const_str();
00144 }
00145
00146 inline bool operator>=(const String &other) const
00147 {
00148 return const_str() >= other.const_str();
00149 }
00150
00154 const_iterator begin() const;
00155
00159 const_iterator end() const;
00160
00164 String &operator=(const String &other);
00165
00169 inline bool operator==(const String &other) const
00170 {
00171 return str == other.str || const_str() == other.const_str();
00172 }
00173
00177 inline bool operator!=(const String &other) const
00178 {
00179 return !(*this == other);
00180 }
00181
00185 String &append(const String &str);
00186
00190 String &append(const String &str, ::size_t pos, ::size_t n);
00191
00195 String &append(char c);
00196
00200 String &append(const char *cstr);
00201
00205 String &append(const char *cstr, ::size_t n);
00206
00210 String &append(const std::string &str);
00211
00215 inline String &operator+=(const String &str) { return append(str); }
00216
00220 inline String &operator+=(const char *cstr) { return append(cstr); }
00221
00225 inline String &operator+=(char c) { return append(c); }
00226
00230 void serialize(boost::archive::text_oarchive &ar,
00231 const unsigned int unused) const;
00232
00236 void serialize(boost::archive::text_iarchive &ar,
00237 const unsigned int unused);
00238
00242 void reserve(::size_t n);
00243
00247 bool startsWith(const char *cString) const;
00248
00252 bool startsWith(const String &str) const;
00253
00254 };
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312 }
00313
00314 #endif // ACEDIA_STRING_H