guit  0.1
 All Classes Functions Variables Typedefs Enumerations Friends
gstring.hpp
1 //
2 // Strings
3 // Guit GUI Toolkit
4 // Copyright © 2020 Eric Lecolinet. All rights reserved.
5 // http://www.telecom-paris.fr/~elc
6 //
7 
8 #ifndef Guit_String_hpp
9 #define Guit_String_hpp
10 #include <gtypes.hpp>
11 namespace guit {
12 
16 void strtrim(GString& str, bool remquotes = false);
17 
18 
19 enum struct SplitMode {Raw = 0, Trim = 1, CheckQuotes = 2, RemQuotes = 3};
20 
65 size_t strsplit(GString const& str,
67  GString& left, GString& right,
68  GString const& delimiters = "",
69  SplitMode mode = SplitMode::Trim);
70 
71 size_t strsplit(GString const& str,
72  GStrings& tokens,
73  GString const& delimiters = "",
74  int limit = 0,
75  SplitMode mode = SplitMode::Trim);
77 
90 size_t strregsplit(GString const& str,
91  GStrings& tokens,
92  GString const& regex,
93  int limit = 0,
94  bool trim = true);
95 
100 int strtoken(GString const& str,
101  GString& token,
102  size_t& from,
103  GString const& delimiters = "",
104  SplitMode mode = SplitMode::Trim);
105 
107 GString strlower(GString const& str);
108 
110 GString strupper(GString const& str);
111 
113 bool strblank(GString const& str);
114 
117 bool strequal(GString const& str1, GString const& str2, bool ignore_case);
118 int strcompare(GString const& str1, GString const& str2, bool ignore_case);
120 
135 inline constexpr uint64_t strid(const char* str, int last = 8, uint64_t id = 0) {
136  return (!*str || last==0) ? id : strid(str+1, last-1, (id<<8) + uint64_t(*str));
137 }
138 
141 inline uint64_t strid(GString const& str, int last = 8) {
142  return strid(str.data(), last, 0);
143 }
144 
149 ssize_t strPosToIndex(GString const& str, ssize_t charpos, bool richtext);
150 ssize_t strIndexToPos(GString const& str, ssize_t index, bool richtext);
152 
156 size_t strNextIndex(GString const& str, ssize_t index, bool richtext);
157 size_t strPreviousIndex(GString const& str, ssize_t index, bool richtext);
159 
160 }
161 #endif