3 This file is part of libmspstrings
4 Copyright © 2006-2008 Mikko Rasa
5 Distributed under the LGPL
8 #ifndef MSP_STRINGS_FMT_H_
9 #define MSP_STRINGS_FMT_H_
17 Stores formatting information for converting variables into strings. Can be
18 applied to an std::ostream or fed to lexical_cast. Also used internally by
21 Formats can be constructed from printf-style conversion specifications, by
22 chaining calls to the various setter functions, or with a mixture of both.
24 Since type information for conversions is acquired through templates, the
25 meaning of the conversion specifier character is reduced to only specifying
26 what the conversion should look like. Of special note is the s conversion,
27 which will result in a default conversion for any data type. Size modifiers
28 are not supported and there is no difference between signed and unsigned
31 Some new conversions are supported:
33 b/B Binary integer conversion
34 P Uppercase pointer conversion (like %#X)
83 Fmt(const char *f) { reset(); parse(f); }
84 Fmt(const std::string &f) { reset(); parse(f.c_str()); }
87 void parse(const char *);
90 Fmt &width(unsigned w) { wd = w; return *this; }
91 Fmt &precision(unsigned p) { prec = p; return *this; }
92 Fmt &showpos(bool s=true) { spos = s; return *this; }
93 Fmt &fill(wchar_t f) { fillc = f; return *this; }
94 Fmt &fixed() { fmode = FIXED; return *this; }
95 Fmt &scientific() { fmode = SCI; return *this; }
96 Fmt &showpoint(bool s=true) { spoint = s; return *this; }
97 Fmt &showbase(bool s=true) { sbase = s; return *this; }
98 Fmt &left() { align = LEFT; return *this; }
99 Fmt &right() { align = RIGHT; return *this; }
100 Fmt &dec() { base = DEC; return *this; }
101 Fmt &hex() { base = HEX; return *this; }
102 Fmt &oct() { base = OCT; return *this; }
103 Fmt &bin() { base = BIN; return *this; }
104 Fmt &uppercase(bool u=true) { ucase = u; return *this; }
105 Fmt &numeric() { type = NUM; return *this; }
106 Fmt &character() { type = CHAR; return *this; }
107 Fmt &string() { type = STR; return *this; }
110 unsigned get_width() const { return wd; }
111 unsigned get_precision() const { return prec; }
112 bool get_showpos() const { return spos; }
113 wchar_t get_fill() const { return fillc; }
114 Base get_base() const { return base; }
115 bool get_showbase() const { return sbase; }
116 FloatMode get_floatmode() const { return fmode; }
117 bool get_showpoint() const { return spoint; }
118 Align get_align() const { return align; }
119 bool get_uppercase() const { return ucase; }
120 Type get_type() const { return type; }
122 void apply(std::ostream &) const;
125 inline std::ostream &operator<<(std::ostream &o, const Fmt &f)
126 { f.apply(o); return o; }