Samchon Framework for CPP  1.0.0
WeakString.hpp
1 #pragma once
2 #include <samchon/API.hpp>
3 
4 #include <samchon/library/IOperator.hpp>
5 
6 #include <string>
7 #include <vector>
8 #include <samchon/IndexPair.hpp>
9 
10 namespace samchon
11 {
32  class SAMCHON_FRAMEWORK_API WeakString
33  {
34  private:
38  static const std::vector<std::string> SPACE_ARRAY;
39 
40  public:
53  static const size_t npos = -1;
54 
55  private:
59  const char *data_;
60 
64  size_t size_;
65 
66  public:
67  /* --------------------------------------------------------------------
68  CONSTRUCTORS
69  -------------------------------------------------------------------- */
74  WeakString();
75 
95  WeakString(const char *data, size_t size);
96 
116  WeakString(const char *begin, const char *end);
117 
125  WeakString(const char *data);
126 
134  WeakString(const char &ch);
135 
143  WeakString(std::initializer_list<char> &il);
144 
152  WeakString(const std::string &str);
153 
154  /* --------------------------------------------------------------------
155  ELEMENT ACCESSORS
156  -------------------------------------------------------------------- */
168  auto data() const -> const char*;
169 
176  auto size() const -> size_t;
177 
187  auto empty() const -> bool;
188 
195  auto at(size_t index) const -> const char&;
196 
200  auto operator[](size_t index) const -> const char&;
201 
202  /* --------------------------------------------------------------------
203  FINDERS
204  -------------------------------------------------------------------- */
217  auto find(const WeakString &delim, size_t startIndex = NULL) const -> size_t;
218 
230  auto rfind(const WeakString &delim, size_t endIndex = SIZE_MAX) const -> size_t;
231 
247  auto finds(const std::vector<std::string> &delims, size_t startIndex = 0) const -> IndexPair<WeakString>;
248  auto finds(const std::vector<WeakString> &delims, size_t startIndex = 0) const -> IndexPair<WeakString>;
249 
265  auto rfinds(const std::vector<std::string> &delims, size_t endIndex = SIZE_MAX) const -> IndexPair<WeakString>;
266  auto rfinds(const std::vector<WeakString> &delims, size_t endIndex = SIZE_MAX) const -> IndexPair<WeakString>;
267 
268  /* --------------------------------------------------------------------
269  EXTRACTORS
270  -------------------------------------------------------------------- */
286  auto substr(size_t startIndex, size_t endIndex = SIZE_MAX) const -> WeakString;
287 
306  auto substring(size_t startIndex, size_t size = SIZE_MAX) const -> WeakString;
307 
326  auto between(const WeakString &start = {}, const WeakString &end = {}) const -> WeakString;
327 
335  auto split(const WeakString &delim) const -> std::vector<WeakString>;
336 
357  auto betweens(const WeakString &start = {}, const WeakString &end = {}) const -> std::vector<WeakString>;
358 
359  /* --------------------------------------------------------------------
360  TRIMS
361  -------------------------------------------------------------------- */
368  auto trim(const std::vector<std::string> &delims) const -> WeakString;
369 
376  auto ltrim(const std::vector<std::string> &delims) const -> WeakString;
377 
384  auto rtrim(const std::vector<std::string> &delims) const -> WeakString;
385 
386  auto trim() const -> WeakString;
387  auto ltrim() const -> WeakString;
388  auto rtrim() const -> WeakString;
389 
390  auto trim(const WeakString &delim) const -> WeakString;
391  auto ltrim(const WeakString &delim) const -> WeakString;
392  auto rtrim(const WeakString &delim) const -> WeakString;
393 
394  auto trim(const std::vector<WeakString> &delims) const -> WeakString;
395  auto ltrim(const std::vector<WeakString> &delims) const -> WeakString;
396  auto rtrim(const std::vector<WeakString> &delims) const -> WeakString;
397 
398  /* --------------------------------------------------------------------
399  REPLACERS
400  -------------------------------------------------------------------- */
408  auto replace(const WeakString &before, const WeakString &after) const -> std::string;
409 
417  auto replaceAll(const WeakString &before, const WeakString &after) const -> std::string;
418 
426  auto replaceAll(const std::vector<std::pair<std::string, std::string>> &pairs) const -> std::string;
427  auto replaceAll(const std::vector<std::pair<WeakString, WeakString>> &pairs) const -> std::string;
428 
436  auto toLowerCase() const -> std::string;
437 
445  auto toUpperCase() const -> std::string;
446 
447  /* --------------------------------------------------------------------
448  COMPARISONS
449  -------------------------------------------------------------------- */
450  auto operator==(const WeakString &str) const -> bool;
451  auto operator<(const WeakString &str) const -> bool;
452  OPERATOR_METHODS_HEADER(WeakString)
453 
454  /* --------------------------------------------------------------------
455  CONVERSIONS
456  -------------------------------------------------------------------- */
463  auto str() const -> std::string;
464  operator std::string();
465  };
466 };
Definition: RWMutex.hpp:4
static const std::vector< std::string > SPACE_ARRAY
An array containing whitespaces.
Definition: WeakString.hpp:38
const char * data_
Referenced characters&#39;s pointer of begining position.
Definition: WeakString.hpp:59
size_t size_
(Specified) size of referenced characters
Definition: WeakString.hpp:64
A pair of index and its value(T)
Definition: IndexPair.hpp:29
Top level namespace of products built from samchon.
Definition: ByteArray.hpp:7
A string class only references characeters, reference only.
Definition: WeakString.hpp:32