00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _SWORD_BASE_LEXICALFORMATTER_
00020 #define _SWORD_BASE_LEXICALFORMATTER_
00021
00022 namespace sword {
00023
00025
00069 class LexicalFormatter {
00070 public:
00071 LexicalFormatter();
00072 explicit LexicalFormatter(const char *format);
00073 explicit LexicalFormatter(const std::string& format);
00074
00075 const char *parseFormat(const char *format);
00076
00077
00078 inline word width_int (int value) const;
00079 inline word width_word (word value) const;
00080 inline word width_int64 (int64 value) const;
00081 inline word width_word64 (word64 value) const;
00082
00083
00084 inline char *format_int (int value, char *buffer, word bufferLen) const;
00085 inline char *format_word (word value, char *buffer, word bufferLen) const;
00086 inline char *format_int64 (int64 value, char *buffer, word bufferLen) const;
00087 inline char *format_word64(word64 value, char *buffer, word bufferLen) const;
00088
00089 private:
00090 char *(*formatter_word_ )(word value, word width, word precision, char *buffer, word bufferLen);
00091 char *(*formatter_int_ )(int value, word width, word precision, char *buffer, word bufferLen);
00092 char *(*formatter_word64_)(word64 value, word width, word precision, char *buffer, word bufferLen);
00093 char *(*formatter_int64_ )(int64 value, word width, word precision, char *buffer, word bufferLen);
00094 word width_;
00095 word precision_;
00096 };
00097
00098 class LexicalFormatterException : public Exception {};
00099
00100 template<class SOURCE>
00101 class LexicalFormatterActor {
00102 public:
00103 static word width (const LexicalFormatter& f, SOURCE source);
00104 static char *format(const LexicalFormatter& f, SOURCE source, char *buffer, word bufferLen);
00105 };
00106
00107 }
00108
00109 #include "sword.private/base.LexicalFormatter.inl"
00110
00111 #endif // _SWORD_BASE_LEXICALFORMATTER_