| 123 |
125 |
| 124 private: |
126 private: |
| 125 std::string m_string; |
127 std::string m_string; |
| 126 }; |
128 }; |
| 127 |
129 |
| |
130 // ------------------------------------------------------------------------------------------------- |
| |
131 |
| 128 class StringList : public List<String> |
132 class StringList : public List<String> |
| 129 { |
133 { |
| 130 public: |
134 public: |
| 131 template<typename... Args> |
135 template<typename... Args> |
| 132 StringList (Args... args) : |
136 StringList (Args... args) : |
| 133 List<String> (args...) {} |
137 List<String> (args...) {} |
| 134 |
138 |
| 135 METHOD join (const String& delim) -> String; |
139 METHOD join (const String& delim) -> String; |
| 136 }; |
140 }; |
| 137 |
141 |
| |
142 // ------------------------------------------------------------------------------------------------- |
| |
143 |
| 138 inline FUNCTION operator== (const char* a, const String& b) -> bool; |
144 inline FUNCTION operator== (const char* a, const String& b) -> bool; |
| 139 inline FUNCTION operator+ (const char* a, const String& b) -> String; |
145 inline FUNCTION operator+ (const char* a, const String& b) -> String; |
| 140 |
146 |
| 141 // |
147 // ------------------------------------------------------------------------------------------------- |
| 142 // ------------------------------------------------------------------------------------------------- |
|
| 143 // |
|
| 144 // IMPLEMENTATIONS |
|
| 145 // |
|
| 146 |
148 |
| 147 inline METHOD |
149 inline METHOD |
| 148 String::is_empty() const -> bool |
150 String::is_empty() const -> bool |
| 149 { |
151 { |
| 150 return m_string[0] == '\0'; |
152 return m_string[0] == '\0'; |
| 151 } |
153 } |
| 152 |
154 |
| 153 // |
155 // ------------------------------------------------------------------------------------------------- |
| 154 // ------------------------------------------------------------------------------------------------- |
|
| 155 // |
|
| 156 |
156 |
| 157 inline METHOD |
157 inline METHOD |
| 158 String::append (const char* data) -> void |
158 String::append (const char* data) -> void |
| 159 { |
159 { |
| 160 m_string.append (data); |
160 m_string.append (data); |
| 161 } |
161 } |
| 162 |
162 |
| 163 // |
163 // ------------------------------------------------------------------------------------------------- |
| 164 // ------------------------------------------------------------------------------------------------- |
|
| 165 // |
|
| 166 |
164 |
| 167 inline METHOD |
165 inline METHOD |
| 168 String::append (char data) -> void |
166 String::append (char data) -> void |
| 169 { |
167 { |
| 170 m_string.push_back (data); |
168 m_string.push_back (data); |
| 171 } |
169 } |
| 172 |
170 |
| 173 // |
171 // ------------------------------------------------------------------------------------------------- |
| 174 // ------------------------------------------------------------------------------------------------- |
|
| 175 // |
|
| 176 |
172 |
| 177 inline METHOD |
173 inline METHOD |
| 178 String::append (const String& data) -> void |
174 String::append (const String& data) -> void |
| 179 { |
175 { |
| 180 m_string.append (data.chars()); |
176 m_string.append (data.chars()); |
| 181 } |
177 } |
| 182 |
178 |
| 183 // |
179 // ------------------------------------------------------------------------------------------------- |
| 184 // ------------------------------------------------------------------------------------------------- |
|
| 185 // |
|
| 186 |
180 |
| 187 inline METHOD |
181 inline METHOD |
| 188 String::begin() -> std::string::iterator |
182 String::begin() -> std::string::iterator |
| 189 { |
183 { |
| 190 return m_string.begin(); |
184 return m_string.begin(); |
| 191 } |
185 } |
| 192 |
186 |
| 193 // |
187 // ------------------------------------------------------------------------------------------------- |
| 194 // ------------------------------------------------------------------------------------------------- |
|
| 195 // |
|
| 196 |
188 |
| 197 inline METHOD |
189 inline METHOD |
| 198 String::begin() const -> std::string::const_iterator |
190 String::begin() const -> std::string::const_iterator |
| 199 { |
191 { |
| 200 return m_string.cbegin(); |
192 return m_string.cbegin(); |
| 201 } |
193 } |
| 202 |
194 |
| 203 // |
195 // ------------------------------------------------------------------------------------------------- |
| 204 // ------------------------------------------------------------------------------------------------- |
|
| 205 // |
|
| 206 |
196 |
| 207 inline const char* String::chars() const |
197 inline const char* String::chars() const |
| 208 { |
198 { |
| 209 return m_string.c_str(); |
199 return m_string.c_str(); |
| 210 } |
200 } |
| 211 |
201 |
| 212 // |
202 // ------------------------------------------------------------------------------------------------- |
| 213 // ------------------------------------------------------------------------------------------------- |
|
| 214 // |
|
| 215 |
203 |
| 216 inline METHOD |
204 inline METHOD |
| 217 String::end() -> std::string::iterator |
205 String::end() -> std::string::iterator |
| 218 { |
206 { |
| 219 return m_string.end(); |
207 return m_string.end(); |
| 220 } |
208 } |
| 221 |
209 |
| 222 // |
210 // ------------------------------------------------------------------------------------------------- |
| 223 // ------------------------------------------------------------------------------------------------- |
|
| 224 // |
|
| 225 |
211 |
| 226 inline METHOD |
212 inline METHOD |
| 227 String::end() const -> std::string::const_iterator |
213 String::end() const -> std::string::const_iterator |
| 228 { |
214 { |
| 229 return m_string.end(); |
215 return m_string.end(); |
| 230 } |
216 } |
| 231 |
217 |
| 232 // |
218 // ------------------------------------------------------------------------------------------------- |
| 233 // ------------------------------------------------------------------------------------------------- |
|
| 234 // |
|
| 235 |
219 |
| 236 inline METHOD |
220 inline METHOD |
| 237 String::clear() -> void |
221 String::clear() -> void |
| 238 { |
222 { |
| 239 m_string.clear(); |
223 m_string.clear(); |
| 240 } |
224 } |
| 241 |
225 |
| 242 // |
226 // ------------------------------------------------------------------------------------------------- |
| 243 // ------------------------------------------------------------------------------------------------- |
|
| 244 // |
|
| 245 |
227 |
| 246 inline METHOD |
228 inline METHOD |
| 247 String::remove (int pos) -> void |
229 String::remove (int pos) -> void |
| 248 { |
230 { |
| 249 m_string.erase (m_string.begin() + pos); |
231 m_string.erase (m_string.begin() + pos); |
| 250 } |
232 } |
| 251 |
233 |
| 252 // |
234 // ------------------------------------------------------------------------------------------------- |
| 253 // ------------------------------------------------------------------------------------------------- |
|
| 254 // |
|
| 255 |
235 |
| 256 inline METHOD |
236 inline METHOD |
| 257 String::insert (int pos, char c) -> void |
237 String::insert (int pos, char c) -> void |
| 258 { |
238 { |
| 259 m_string.insert (m_string.begin() + pos, c); |
239 m_string.insert (m_string.begin() + pos, c); |
| 260 } |
240 } |
| 261 |
241 |
| 262 // |
242 // ------------------------------------------------------------------------------------------------- |
| 263 // ------------------------------------------------------------------------------------------------- |
|
| 264 // |
|
| 265 |
243 |
| 266 inline METHOD |
244 inline METHOD |
| 267 String::length() const -> int |
245 String::length() const -> int |
| 268 { |
246 { |
| 269 return m_string.length(); |
247 return m_string.length(); |
| 270 } |
248 } |
| 271 |
249 |
| 272 // |
250 // ------------------------------------------------------------------------------------------------- |
| 273 // ------------------------------------------------------------------------------------------------- |
|
| 274 // |
|
| 275 |
251 |
| 276 inline METHOD |
252 inline METHOD |
| 277 String::remove (int pos, int len) -> void |
253 String::remove (int pos, int len) -> void |
| 278 { |
254 { |
| 279 m_string.replace (pos, len, ""); |
255 m_string.replace (pos, len, ""); |
| 280 } |
256 } |
| 281 |
257 |
| 282 // |
258 // ------------------------------------------------------------------------------------------------- |
| 283 // ------------------------------------------------------------------------------------------------- |
|
| 284 // |
|
| 285 |
259 |
| 286 inline METHOD |
260 inline METHOD |
| 287 String::remove_from_start (int len) -> void |
261 String::remove_from_start (int len) -> void |
| 288 { |
262 { |
| 289 remove (0, len); |
263 remove (0, len); |
| 290 } |
264 } |
| 291 |
265 |
| 292 // |
266 // ------------------------------------------------------------------------------------------------- |
| 293 // ------------------------------------------------------------------------------------------------- |
|
| 294 // |
|
| 295 |
267 |
| 296 inline METHOD |
268 inline METHOD |
| 297 String::remove_from_end (int len) -> void |
269 String::remove_from_end (int len) -> void |
| 298 { |
270 { |
| 299 remove (length() - len, len); |
271 remove (length() - len, len); |
| 300 } |
272 } |
| 301 |
273 |
| 302 // |
274 // ------------------------------------------------------------------------------------------------- |
| 303 // ------------------------------------------------------------------------------------------------- |
|
| 304 // |
|
| 305 |
275 |
| 306 inline METHOD |
276 inline METHOD |
| 307 String::replace (int pos, int n, const String& a) -> void |
277 String::replace (int pos, int n, const String& a) -> void |
| 308 { |
278 { |
| 309 m_string.replace (pos, n, a.chars()); |
279 m_string.replace (pos, n, a.chars()); |
| 310 } |
280 } |
| 311 |
281 |
| 312 // |
282 // ------------------------------------------------------------------------------------------------- |
| 313 // ------------------------------------------------------------------------------------------------- |
|
| 314 // |
|
| 315 |
283 |
| 316 inline METHOD |
284 inline METHOD |
| 317 String::shrink_to_fit() -> void |
285 String::shrink_to_fit() -> void |
| 318 { |
286 { |
| 319 m_string.shrink_to_fit(); |
287 m_string.shrink_to_fit(); |
| 320 } |
288 } |
| 321 |
289 |
| 322 // |
290 // ------------------------------------------------------------------------------------------------- |
| 323 // ------------------------------------------------------------------------------------------------- |
|
| 324 // |
|
| 325 |
291 |
| 326 inline const std::string& String::std_string() const |
292 inline const std::string& String::std_string() const |
| 327 { |
293 { |
| 328 return m_string; |
294 return m_string; |
| 329 } |
295 } |
| 330 |
296 |
| 331 // |
297 // ------------------------------------------------------------------------------------------------- |
| 332 // ------------------------------------------------------------------------------------------------- |
|
| 333 // |
|
| 334 |
298 |
| 335 inline METHOD |
299 inline METHOD |
| 336 String::strip (char unwanted) -> String |
300 String::strip (char unwanted) -> String |
| 337 { |
301 { |
| 338 return strip ({unwanted}); |
302 return strip ({unwanted}); |
| 339 } |
303 } |
| 340 |
304 |
| 341 // |
305 // ------------------------------------------------------------------------------------------------- |
| 342 // ------------------------------------------------------------------------------------------------- |
|
| 343 // |
|
| 344 |
306 |
| 345 inline METHOD |
307 inline METHOD |
| 346 String::operator+ (int num) const -> String |
308 String::operator+ (int num) const -> String |
| 347 { |
309 { |
| 348 return *this + String::from_number (num); |
310 return *this + String::from_number (num); |
| 349 } |
311 } |
| 350 |
312 |
| 351 // |
313 // ------------------------------------------------------------------------------------------------- |
| 352 // ------------------------------------------------------------------------------------------------- |
|
| 353 // |
|
| 354 |
314 |
| 355 inline METHOD |
315 inline METHOD |
| 356 String::operator+= (const String& data) -> String& |
316 String::operator+= (const String& data) -> String& |
| 357 { |
317 { |
| 358 append (data); |
318 append (data); |
| 359 return *this; |
319 return *this; |
| 360 } |
320 } |
| 361 |
321 |
| 362 // |
322 // ------------------------------------------------------------------------------------------------- |
| 363 // ------------------------------------------------------------------------------------------------- |
|
| 364 // |
|
| 365 |
323 |
| 366 inline METHOD |
324 inline METHOD |
| 367 String::operator+= (const char* data) -> String& |
325 String::operator+= (const char* data) -> String& |
| 368 { |
326 { |
| 369 append (data); |
327 append (data); |
| 370 return *this; |
328 return *this; |
| 371 } |
329 } |
| 372 |
330 |
| 373 // |
331 // ------------------------------------------------------------------------------------------------- |
| 374 // ------------------------------------------------------------------------------------------------- |
|
| 375 // |
|
| 376 |
332 |
| 377 inline METHOD |
333 inline METHOD |
| 378 String::operator+= (int num) -> String& |
334 String::operator+= (int num) -> String& |
| 379 { |
335 { |
| 380 return operator+= (String::from_number (num)); |
336 return operator+= (String::from_number (num)); |
| 381 } |
337 } |
| 382 |
338 |
| 383 // |
339 // ------------------------------------------------------------------------------------------------- |
| 384 // ------------------------------------------------------------------------------------------------- |
|
| 385 // |
|
| 386 |
340 |
| 387 inline METHOD |
341 inline METHOD |
| 388 String::prepend (String a) -> void |
342 String::prepend (String a) -> void |
| 389 { |
343 { |
| 390 m_string = (a + m_string).std_string(); |
344 m_string = (a + m_string).std_string(); |
| 391 } |
345 } |
| 392 |
346 |
| 393 // |
347 // ------------------------------------------------------------------------------------------------- |
| 394 // ------------------------------------------------------------------------------------------------- |
|
| 395 // |
|
| 396 |
348 |
| 397 inline METHOD |
349 inline METHOD |
| 398 String::operator+= (char data) -> String& |
350 String::operator+= (char data) -> String& |
| 399 { |
351 { |
| 400 append (data); |
352 append (data); |
| 401 return *this; |
353 return *this; |
| 402 } |
354 } |
| 403 |
355 |
| 404 // |
356 // ------------------------------------------------------------------------------------------------- |
| 405 // ------------------------------------------------------------------------------------------------- |
|
| 406 // |
|
| 407 |
357 |
| 408 inline METHOD |
358 inline METHOD |
| 409 String::operator== (const String& other) const -> bool |
359 String::operator== (const String& other) const -> bool |
| 410 { |
360 { |
| 411 return std_string() == other.std_string(); |
361 return std_string() == other.std_string(); |
| 412 } |
362 } |
| 413 |
363 |
| 414 // |
364 // ------------------------------------------------------------------------------------------------- |
| 415 // ------------------------------------------------------------------------------------------------- |
|
| 416 // |
|
| 417 |
365 |
| 418 inline METHOD |
366 inline METHOD |
| 419 String::operator== (const char* other) const -> bool |
367 String::operator== (const char* other) const -> bool |
| 420 { |
368 { |
| 421 return operator== (String (other)); |
369 return operator== (String (other)); |
| 422 } |
370 } |
| 423 |
371 |
| 424 // |
372 // ------------------------------------------------------------------------------------------------- |
| 425 // ------------------------------------------------------------------------------------------------- |
|
| 426 // |
|
| 427 |
373 |
| 428 inline METHOD |
374 inline METHOD |
| 429 String::operator!= (const String& other) const -> bool |
375 String::operator!= (const String& other) const -> bool |
| 430 { |
376 { |
| 431 return std_string() != other.std_string(); |
377 return std_string() != other.std_string(); |
| 432 } |
378 } |
| 433 |
379 |
| 434 // |
380 // ------------------------------------------------------------------------------------------------- |
| 435 // ------------------------------------------------------------------------------------------------- |
|
| 436 // |
|
| 437 |
381 |
| 438 inline METHOD |
382 inline METHOD |
| 439 String::operator!= (const char* other) const -> bool |
383 String::operator!= (const char* other) const -> bool |
| 440 { |
384 { |
| 441 return operator!= (String (other)); |
385 return operator!= (String (other)); |
| 442 } |
386 } |
| 443 |
387 |
| 444 // |
388 // ------------------------------------------------------------------------------------------------- |
| 445 // ------------------------------------------------------------------------------------------------- |
|
| 446 // |
|
| 447 |
389 |
| 448 inline METHOD |
390 inline METHOD |
| 449 String::operator> (const String& other) const -> bool |
391 String::operator> (const String& other) const -> bool |
| 450 { |
392 { |
| 451 return std_string() > other.std_string(); |
393 return std_string() > other.std_string(); |
| 452 } |
394 } |
| 453 |
395 |
| 454 // |
396 // ------------------------------------------------------------------------------------------------- |
| 455 // ------------------------------------------------------------------------------------------------- |
|
| 456 // |
|
| 457 |
397 |
| 458 inline METHOD |
398 inline METHOD |
| 459 String::operator< (const String& other) const -> bool |
399 String::operator< (const String& other) const -> bool |
| 460 { |
400 { |
| 461 return std_string() < other.std_string(); |
401 return std_string() < other.std_string(); |
| 462 } |
402 } |
| 463 |
403 |
| 464 // |
404 // ------------------------------------------------------------------------------------------------- |
| 465 // ------------------------------------------------------------------------------------------------- |
|
| 466 // |
|
| 467 |
405 |
| 468 inline String::operator const char*() const |
406 inline String::operator const char*() const |
| 469 { |
407 { |
| 470 return chars(); |
408 return chars(); |
| 471 } |
409 } |
| 472 |
410 |
| 473 // |
411 // ------------------------------------------------------------------------------------------------- |
| 474 // ------------------------------------------------------------------------------------------------- |
|
| 475 // |
|
| 476 |
412 |
| 477 inline String::operator const std::string&() const |
413 inline String::operator const std::string&() const |
| 478 { |
414 { |
| 479 return std_string(); |
415 return std_string(); |
| 480 } |
416 } |
| 481 |
417 |
| 482 // |
418 // ------------------------------------------------------------------------------------------------- |
| 483 // ------------------------------------------------------------------------------------------------- |
|
| 484 // |
|
| 485 |
419 |
| 486 inline METHOD |
420 inline METHOD |
| 487 String::modify_index (int& a) -> void |
421 String::modify_index (int& a) -> void |
| 488 { |
422 { |
| 489 if (a < 0) |
423 if (a < 0) |
| 490 a = length() - a; |
424 a = length() - a; |
| 491 } |
425 } |
| 492 |
426 |
| 493 // |
427 // ------------------------------------------------------------------------------------------------- |
| 494 // ------------------------------------------------------------------------------------------------- |
|
| 495 // |
|
| 496 |
428 |
| 497 inline METHOD |
429 inline METHOD |
| 498 String::index_difference (int a, int b) -> int |
430 String::index_difference (int a, int b) -> int |
| 499 { |
431 { |
| 500 modify_index (a); |
432 modify_index (a); |
| 501 modify_index (b); |
433 modify_index (b); |
| 502 return b - a; |
434 return b - a; |
| 503 } |
435 } |
| 504 |
436 |
| 505 // |
437 // ------------------------------------------------------------------------------------------------- |
| 506 // ------------------------------------------------------------------------------------------------- |
|
| 507 // |
|
| 508 |
438 |
| 509 inline FUNCTION |
439 inline FUNCTION |
| 510 operator== (const char* a, const String& b) -> bool |
440 operator== (const char* a, const String& b) -> bool |
| 511 { |
441 { |
| 512 return b == a; |
442 return b == a; |
| 513 } |
443 } |
| 514 |
444 |
| 515 // |
445 // ------------------------------------------------------------------------------------------------- |
| 516 // ------------------------------------------------------------------------------------------------- |
|
| 517 // |
|
| 518 |
446 |
| 519 inline FUNCTION |
447 inline FUNCTION |
| 520 operator+ (const char* a, const String& b) -> String |
448 operator+ (const char* a, const String& b) -> String |
| 521 { |
449 { |
| 522 return String (a) + b; |
450 return String (a) + b; |