3 #ifndef __ARC_ISTRING__
4 #define __ARC_ISTRING__
10 #include <sigc++/slot.h>
17 #define istring(x) (x)
25 virtual ~PrintFBase();
26 virtual void msg(std::ostream& os) = 0;
27 virtual void msg(std::string& s) = 0;
32 PrintFBase(
const PrintFBase&);
34 PrintFBase& operator=(
const PrintFBase&);
44 const char*
FindNTrans(
const char *s,
const char *p,
unsigned long n);
47 template<
class T0 = int,
class T1 = int,
class T2 = int,
class T3 = int,
48 class T4 = int,
class T5 = int,
class T6 = int,
class T7 =
int>
54 PrintF(
const std::string& m,
55 const T0& tt0 = 0,
const T1& tt1 = 0,
56 const T2& tt2 = 0,
const T3& tt3 = 0,
57 const T4& tt4 = 0,
const T5& tt5 = 0,
58 const T6& tt6 = 0,
const T7& tt7 = 0)
72 for (std::list<char*>::iterator it = ptrs.begin();
73 it != ptrs.end(); it++)
77 virtual void msg(std::ostream& os) {
80 snprintf(buffer, 2048, Get(m),
81 Get(t0), Get(t1), Get(t2), Get(t3),
82 Get(t4), Get(t5), Get(t6), Get(t7));
86 virtual void msg(std::string& s) {
89 snprintf(buffer, 2048, Get(m),
90 Get(t0), Get(t1), Get(t2), Get(t3),
91 Get(t4), Get(t5), Get(t6), Get(t7));
98 template<
class T,
class U>
99 inline void Copy(T& t,
const U& u) {
105 inline void Copy(T& t,
const char u[]) {
110 inline void Copy(
const char*& t,
const char*
const& u) {
112 ptrs.push_back(const_cast<char*>(t));
116 inline void Copy(
char*& t,
char*
const& u) {
123 inline static const T& Get(
const T& t) {
128 inline static const char* Get(
const char*
const& t) {
133 inline static const char* Get(
char*
const& t) {
134 return FindTrans(const_cast<const char*&>(t));
138 inline static const char* Get(
const std::string& t) {
143 inline static const char* Get(std::string (*t)()) {
148 inline static const char* Get(
const Glib::ustring& t) {
153 inline static const char* Get(Glib::ustring (*t)()) {
158 inline static const char* Get(
const sigc::slot<const char*> *t) {
171 std::list<char*> ptrs;
185 : p(
new PrintF<>(m)) {}
188 IString(
const std::string& m,
const T0& t0)
189 : p(
new PrintF<T0>(m, t0)) {}
191 template<
class T0,
class T1>
192 IString(
const std::string& m,
const T0& t0,
const T1& t1)
193 : p(
new PrintF<T0, T1>(m, t0, t1)) {}
195 template<
class T0,
class T1,
class T2>
196 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2)
197 : p(
new PrintF<T0, T1, T2>(m, t0, t1, t2)) {}
199 template<
class T0,
class T1,
class T2,
class T3>
200 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3)
201 : p(
new PrintF<T0, T1, T2, T3>(m, t0, t1, t2, t3)) {}
203 template<
class T0,
class T1,
class T2,
class T3,
class T4>
204 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4)
205 : p(
new PrintF<T0, T1, T2, T3, T4>(m, t0, t1, t2, t3, t4)) {}
207 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5>
208 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5)
209 : p(
new PrintF<T0, T1, T2, T3, T4, T5>(m, t0, t1, t2, t3, t4, t5)) {}
211 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
212 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6)
213 : p(
new PrintF<T0, T1, T2, T3, T4, T5, T6>(m, t0, t1, t2, t3, t4, t5, t6)) {}
215 template<
class T0,
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
216 IString(
const std::string& m,
const T0& t0,
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
const T7& t7)
217 : p(
new PrintF<T0, T1, T2, T3, T4, T5, T6, T7>(m, t0, t1, t2, t3, t4, t5, t6, t7)) {}
223 std::string str(
void);
237 #endif // __ARC_ISTRING__