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