]> git.tdb.fi Git - libs/core.git/blob - source/io/print.h
Add RAII utilities
[libs/core.git] / source / io / print.h
1 #ifndef MSP_IO_PRINT_H_
2 #define MSP_IO_PRINT_H_
3
4 #include <msp/strings/format.h>
5 #include "base.h"
6 #include "console.h"
7
8 namespace Msp {
9 namespace IO {
10
11 /**
12 Writes a string to an I/O object.  Same as o.write(f).  Provided for
13 completeness with the other print functions.
14 */
15 inline unsigned print(Base &o, const std::string &f)
16 { return o.write(f); }
17
18 template<typename A1>
19 inline unsigned print(Base &o, const std::string &f, A1 a1)
20 { return print(o, format(f, a1)); }
21
22 template<typename A1, typename A2>
23 inline unsigned print(Base &o, const std::string &f, A1 a1, A2 a2)
24 { return print(o, format(f, a1, a2)); }
25
26 template<typename A1, typename A2, typename A3>
27 inline unsigned print(Base &o, const std::string &f, A1 a1, A2 a2, A3 a3)
28 { return print(o, format(f, a1, a2, a3)); }
29
30 template<typename A1, typename A2, typename A3, typename A4>
31 inline unsigned print(Base &o, const std::string &f, A1 a1, A2 a2, A3 a3, A4 a4)
32 { return print(o, format(f, a1, a2, a3, a4)); }
33
34 template<typename A1, typename A2, typename A3, typename A4, typename A5>
35 inline unsigned print(Base &o, const std::string &f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
36 { return print(o, format(f, a1, a2, a3, a4, a5)); }
37
38 /* The following functions print to console */
39
40 inline unsigned print(const std::string &f)
41 { return print(cout, f); }
42
43 template<typename A1>
44 inline unsigned print(const std::string &f, A1 a1)
45 { return print(cout, f, a1); }
46
47 template<typename A1, typename A2>
48 inline unsigned print(const std::string &f, A1 a1, A2 a2)
49 { return print(cout, f, a1, a2); }
50
51 template<typename A1, typename A2, typename A3>
52 inline unsigned print(const std::string &f, A1 a1, A2 a2, A3 a3)
53 { return print(cout, f, a1, a2, a3); }
54
55 template<typename A1, typename A2, typename A3, typename A4>
56 inline unsigned print(const std::string &f, A1 a1, A2 a2, A3 a3, A4 a4)
57 { return print(cout, f, a1, a2, a3, a4); }
58
59 template<typename A1, typename A2, typename A3, typename A4, typename A5>
60 inline unsigned print(const std::string &f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
61 { return print(cout, f, a1, a2, a3, a4, a5); }
62
63 } // namespace IO
64 } // namespace Msp
65
66 #endif