00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _SWORD_BASE_LEXICAL_CAST_
00020 #define _SWORD_BASE_LEXICAL_CAST_
00021
00022 #include "sword/base.LexicalFormatter.h"
00023
00024 namespace sword {
00025
00026
00027
00028
00029 template<typename TARGET, typename SOURCE>
00030 TARGET _lexical_cast(SOURCE source, const LexicalFormatter& formatter);
00031
00032
00033
00034 #define EXPOSE(TYPE) \
00035 template<typename TARGET> \
00036 inline TARGET lexical_cast(TYPE value) \
00037 { \
00038 return _lexical_cast<TARGET>(value, LexicalFormatter()); \
00039 } \
00040 template<typename TARGET> \
00041 inline TARGET lexical_cast(TYPE value, const LexicalFormatter& formatter) \
00042 { \
00043 return _lexical_cast<TARGET>(value, formatter); \
00044 } \
00045 template<typename TARGET> \
00046 inline TARGET lexical_cast(TYPE value, const std::string& format) \
00047 { \
00048 return _lexical_cast<TARGET>(value, LexicalFormatter(format)); \
00049 } \
00050 template<typename TARGET> \
00051 inline TARGET lexical_cast(TYPE value, const char *format) \
00052 { \
00053 return _lexical_cast<TARGET>(value, LexicalFormatter(format)); \
00054 } \
00055
00056 EXPOSE(int8);
00057 EXPOSE(int16);
00058 EXPOSE(int32);
00059 EXPOSE(int64);
00060 EXPOSE(int);
00061 EXPOSE(word8);
00062 EXPOSE(word16);
00063 EXPOSE(word32);
00064 EXPOSE(word64);
00065 EXPOSE(word);
00066
00067 }
00068
00069 #include "sword.private/base.LexicalCast.inl"
00070
00071 #endif // _SWORD_BASE_LEXICAL_CAST_