1 Vector<String> Split(int maxcount, const char *s, const char * (*text_filter)(const char *), bool ignoreempty = true);
2 Vector<String> Split(int maxcount, const char *s, int (*filter)(int), bool ignoreempty = true);
3 Vector<String> Split(int maxcount, const char *s, int chr, bool ignoreempty = true);
4 Vector<String> Split(int maxcount, const char *s, const char *text, bool ignoreempty = true);
5 Vector<String> Split(const char *s, const char * (*text_filter)(const char *), bool ignoreempty = true);
6 Vector<String> Split(const char *s, int (*filter)(int), bool ignoreempty = true);
7 Vector<String> Split(const char *s, int chr, bool ignoreempty = true);
8 Vector<String> Split(const char *s, const char *text, bool ignoreempty = true);
9
10 Vector<WString> Split(int maxcount, const wchar *s, const wchar * (*text_filter)(const wchar *), bool ignoreempty = true);
11 Vector<WString> Split(int maxcount, const wchar *s, int (*filter)(int), bool ignoreempty = true);
12 Vector<WString> Split(int maxcount, const wchar *s, int chr, bool ignoreempty = true);
13 Vector<WString> Split(int maxcount, const wchar *s, const wchar *text, bool ignoreempty = true);
14 Vector<WString> Split(const wchar *s, const wchar * (*text_filter)(const wchar *), bool ignoreempty = true);
15 Vector<WString> Split(const wchar *s, int (*filter)(int), bool ignoreempty = true);
16 Vector<WString> Split(const wchar *s, int chr, bool ignoreempty = true);
17 Vector<WString> Split(const wchar *s, const wchar *text, bool ignoreempty = true);
18
19 String Join(const Vector<String>& im, const String& delim, bool ignoreempty = false);
20 WString Join(const Vector<WString>& im, const WString& delim, bool ignoreempty = false);
21
22 //$ bool SplitTo(const char *s, int delim, bool ignoreempty, String& p1...);
23 //$ bool SplitTo(const char *s, int delim, String& p1...);
24 //$ bool SplitTo(const char *s, int (*filter)(int), String& p1...);
25 //$ bool SplitTo(const char *s, int (*filter)(int), String& p1...);
26 //$ bool SplitTo(const char *s, const char *delim, bool ignoreempty, String& p1...);
27 //$ bool SplitTo(const char *s, const char *delim, String& p1...);
28
29 //$ bool SplitTo(const wchar *s, int delim, bool ignoreempty, WString& p1...);
30 //$ bool SplitTo(const wchar *s, int delim, WString& p1...);
31 //$ bool SplitTo(const wchar *s, int (*filter)(int), WString& p1...);
32 //$ bool SplitTo(const wchar *s, int (*filter)(int), WString& p1...);
33 //$ bool SplitTo(const wchar *s, const wchar *delim, bool ignoreempty, WString& p1...);
34 //$ bool SplitTo(const wchar *s, const wchar *delim, WString& p1...);
35
36 //$ String Merge(const char *delim, String& p1...);
37 //$ WString Merge(const wchar *delim, WString& p1...);
38
39 //$ void MergeWith(String& dest, const char *delim, String& p1...);
40 //$ void MergeWith(WString& dest, const wchar *delim, WString& p1...);
41
42 //$-
43 template <typename... Args>
SplitTo(const char * s,int delim,bool ignoreempty,Args &...args)44 bool SplitTo(const char *s, int delim, bool ignoreempty, Args& ...args)
45 {
46 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
47 }
48
49 template <typename... Args>
SplitTo(const char * s,int delim,Args &...args)50 bool SplitTo(const char *s, int delim, Args& ...args)
51 {
52 return scatter(Split(sizeof...(args), s, delim), args...);
53 }
54
55 template <typename... Args>
SplitTo(const char * s,int (* delim)(int),bool ignoreempty,Args &...args)56 bool SplitTo(const char *s, int (*delim)(int), bool ignoreempty, Args& ...args)
57 {
58 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
59 }
60
61 template <typename... Args>
SplitTo(const char * s,int (* delim)(int),Args &...args)62 bool SplitTo(const char *s, int (*delim)(int), Args& ...args)
63 {
64 return scatter(Split(sizeof...(args), s, delim), args...);
65 }
66
67 template <typename... Args>
SplitTo(const char * s,const char * delim,bool ignoreempty,Args &...args)68 bool SplitTo(const char *s, const char *delim, bool ignoreempty, Args& ...args)
69 {
70 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
71 }
72
73 template <typename... Args>
SplitTo(const char * s,const char * delim,Args &...args)74 bool SplitTo(const char *s, const char *delim, Args& ...args)
75 {
76 return scatter(Split(sizeof...(args), s, delim), args...);
77 }
78
79 template <typename... Args>
MergeWith(String & dest,const char * delim,const Args &...args)80 void MergeWith(String& dest, const char *delim, const Args& ...args)
81 {
82 foreach_arg([&](const String& arg) {
83 if(arg.GetCount()) {
84 if(dest.GetCount())
85 dest << delim;
86 dest << arg;
87 }
88 }, args...);
89 }
90
91 template <typename... Args>
Merge(const char * delim,const Args &...args)92 String Merge(const char *delim, const Args& ...args)
93 {
94 String r;
95 MergeWith(r, delim, args...);
96 return r;
97 }
98
99 template <typename... Args>
SplitTo(const wchar * s,int delim,bool ignoreempty,Args &...args)100 bool SplitTo(const wchar *s, int delim, bool ignoreempty, Args& ...args)
101 {
102 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
103 }
104
105 template <typename... Args>
SplitTo(const wchar * s,int delim,Args &...args)106 bool SplitTo(const wchar *s, int delim, Args& ...args)
107 {
108 return scatter(Split(sizeof...(args), s, delim), args...);
109 }
110
111 template <typename... Args>
SplitTo(const wchar * s,int (* delim)(int),bool ignoreempty,Args &...args)112 bool SplitTo(const wchar *s, int (*delim)(int), bool ignoreempty, Args& ...args)
113 {
114 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
115 }
116
117 template <typename... Args>
SplitTo(const wchar * s,int (* delim)(int),Args &...args)118 bool SplitTo(const wchar *s, int (*delim)(int), Args& ...args)
119 {
120 return scatter(Split(sizeof...(args), s, delim), args...);
121 }
122
123 template <typename... Args>
SplitTo(const wchar * s,const wchar * delim,bool ignoreempty,Args &...args)124 bool SplitTo(const wchar *s, const wchar *delim, bool ignoreempty, Args& ...args)
125 {
126 return scatter(Split(sizeof...(args), s, delim, ignoreempty), args...);
127 }
128
129 template <typename... Args>
SplitTo(const wchar * s,const wchar * delim,Args &...args)130 bool SplitTo(const wchar *s, const wchar *delim, Args& ...args)
131 {
132 return scatter(Split(sizeof...(args), s, delim), args...);
133 }
134
135 template <typename... Args>
MergeWith(WString & dest,const wchar * delim,const Args &...args)136 void MergeWith(WString& dest, const wchar *delim, const Args& ...args)
137 {
138 foreach_arg([&](const WString& arg) {
139 if(arg.GetCount()) {
140 if(dest.GetCount())
141 dest << delim;
142 dest << arg;
143 }
144 }, args...);
145 }
146
147 template <typename... Args>
Merge(const wchar * delim,const Args &...args)148 WString Merge(const wchar *delim, const Args& ...args)
149 {
150 WString r;
151 MergeWith(r, delim, args...);
152 return r;
153 }
154
155 //$-
156