1:
2:
3: /*************
4: * *
5: * SENTINEL *
6: * *
7: *************/
8:
9:
10: #ifndef WWWI_MIND_FORMAT_H
11: #define WWWI_MIND_FORMAT_H
12:
13:
14: /**********************
15: * *
16: * COMPILER INCLUDES *
17: * *
18: **********************/
19:
20:
21: #include <sstream>
22:
23:
24: /*********************
25: * *
26: * PROJECT INCLUDES *
27: * *
28: *********************/
29:
30:
31: using std::stringstream;
32: using std::string;
33:
34:
35: /*****************
36: * *
37: * CLASS FORMAT *
38: * *
39: *****************/
40:
41: /*
42: * The format class takes a series of as arguments to its constructor
43: * and has a cast to const char *. This means you can use it in a function call
44: * that takes a const char * parameter and the string will be valid for the life
45: * of the call (and no longer). I split this into two classes to avoid any
46: * surprise implicit casts.
47: *
48: * For Example:
49: *
50: * throw tantrum(FOUT("Couldn't alloc ",iBytes," bytes at ",__FILE__,__LINE__));
51: *
52: * WARNING: Use of these classes is an evil act and may cause your alignment
53: * to shift.
54: *
55: */
56:
57: class FIN {
58: public:
59: FIN(void) { m_bValid = false; };
60: template <class T> FIN(const T &ci_tr) {
61: stringstream ss;
62: ss << ci_tr;
63: m_xtr = ss.str();
64: m_bValid = true;
65: };
66: inline bool GetValid(void) const { return m_bValid; }
67: inline const char *Out(void) const { return m_xtr.c_str(); }
68:
69: protected:
70: bool m_bValid;
71: string m_xtr;
72: };
73:
74: static FIN NOFIN;
75:
76: class FOUT {
77: public:
78: FOUT(const FIN &ci_fm1 = NOFIN,
79: const FIN &cm_fm2 = NOFIN,
80: const FIN &cm_fm3 = NOFIN,
81: const FIN &cm_fm4 = NOFIN,
82: const FIN &cm_fm5 = NOFIN,
83: const FIN &cm_fm6 = NOFIN,
84: const FIN &cm_fm7 = NOFIN,
85: const FIN &cm_fm8 = NOFIN,
86: const FIN &cm_fm9 = NOFIN,
87: const FIN &cm_fm10 = NOFIN);
88: operator const char *(void) const { return m_xtr.c_str(); };
89:
90: protected:
91: string m_xtr;
92: };
93:
94:
95: /************
96: * *
97: * THE END *
98: * *
99: ************/
100:
101:
102: #endif
103:
104:
105: