33 #ifndef STRING_COMPOSE_H
34 #define STRING_COMPOSE_H
58 std::string str()
const;
61 std::ostringstream
os;
91 default:
return -1000;
117 template <
typename T>
122 std::string rep =
os.str();
125 for (specification_map::const_iterator i =
specs.lower_bound(
arg_no),
127 output_list::iterator pos = i->second;
133 os.str(std::string());
144 std::string::size_type b = 0, i = 0;
148 while (i < fmt.length()) {
149 if (fmt[i] ==
'%' && i + 1 < fmt.length()) {
150 if (fmt[i + 1] ==
'%') {
151 fmt.replace(i, 2,
"%");
156 output.push_back(fmt.substr(b, i - b));
165 }
while (i + n < fmt.length() &&
is_number(fmt[i + n]));
168 output_list::iterator pos =
output.end();
171 specs.insert(specification_map::value_type(spec_no, pos));
185 output.push_back(fmt.substr(b, i - b));
193 for (output_list::const_iterator i =
output.begin(), end =
output.end();
207 template <
typename T1>
215 template <
typename T1,
typename T2>
217 const T1 &o1,
const T2 &o2)
224 template <
typename T1,
typename T2,
typename T3>
226 const T1 &o1,
const T2 &o2,
const T3 &o3)
233 template <
typename T1,
typename T2,
typename T3,
typename T4>
235 const T1 &o1,
const T2 &o2,
const T3 &o3,
243 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
245 const T1 &o1,
const T2 &o2,
const T3 &o3,
246 const T4 &o4,
const T5 &o5)
253 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
256 const T1 &o1,
const T2 &o2,
const T3 &o3,
257 const T4 &o4,
const T5 &o5,
const T6 &o6)
264 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
265 typename T6,
typename T7>
267 const T1 &o1,
const T2 &o2,
const T3 &o3,
268 const T4 &o4,
const T5 &o5,
const T6 &o6,
276 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
277 typename T6,
typename T7,
typename T8>
279 const T1 &o1,
const T2 &o2,
const T3 &o3,
280 const T4 &o4,
const T5 &o5,
const T6 &o6,
281 const T7 &o7,
const T8 &o8)
288 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
289 typename T6,
typename T7,
typename T8,
typename T9>
291 const T1 &o1,
const T2 &o2,
const T3 &o3,
292 const T4 &o4,
const T5 &o5,
const T6 &o6,
293 const T7 &o7,
const T8 &o8,
const T9 &o9)
300 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
301 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
303 const T1 &o1,
const T2 &o2,
const T3 &o3,
304 const T4 &o4,
const T5 &o5,
const T6 &o6,
305 const T7 &o7,
const T8 &o8,
const T9 &o9,
314 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
315 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
318 const T1 &o1,
const T2 &o2,
const T3 &o3,
319 const T4 &o4,
const T5 &o5,
const T6 &o6,
320 const T7 &o7,
const T8 &o8,
const T9 &o9,
321 const T10 &o10,
const T11 &o11)
329 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
330 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
331 typename T11,
typename T12>
333 const T1 &o1,
const T2 &o2,
const T3 &o3,
334 const T4 &o4,
const T5 &o5,
const T6 &o6,
335 const T7 &o7,
const T8 &o8,
const T9 &o9,
336 const T10 &o10,
const T11 &o11,
const T12 &o12)
344 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
345 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
346 typename T11,
typename T12,
typename T13>
348 const T1 &o1,
const T2 &o2,
const T3 &o3,
349 const T4 &o4,
const T5 &o5,
const T6 &o6,
350 const T7 &o7,
const T8 &o8,
const T9 &o9,
351 const T10 &o10,
const T11 &o11,
const T12 &o12,
360 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
361 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
362 typename T11,
typename T12,
typename T13,
typename T14>
364 const T1 &o1,
const T2 &o2,
const T3 &o3,
365 const T4 &o4,
const T5 &o5,
const T6 &o6,
366 const T7 &o7,
const T8 &o8,
const T9 &o9,
367 const T10 &o10,
const T11 &o11,
const T12 &o12,
368 const T13 &o13,
const T14 &o14)
376 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
377 typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
378 typename T11,
typename T12,
typename T13,
typename T14,
381 const T1 &o1,
const T2 &o2,
const T3 &o3,
382 const T4 &o4,
const T5 &o5,
const T6 &o6,
383 const T7 &o7,
const T8 &o8,
const T9 &o9,
384 const T10 &o10,
const T11 &o11,
const T12 &o12,
385 const T13 &o13,
const T14 &o14,
const T15 &o15)
395 #endif // STRING_COMPOSE_H
std::multimap< int, output_list::iterator > specification_map
Composition & arg(const T &obj)
std::list< std::string > output_list
Composition(std::string fmt)
std::string string_compose(const std::string &fmt, const T1 &o1)