00001 #ifndef UTIL_INTEGER_TO_STRING_H
00002 #define UTIL_INTEGER_TO_STRING_H
00003 #include <cstddef>
00004 #include <stdint.h>
00005
00006 namespace util {
00007
00008
00009
00010 char *ToString(uint32_t value, char *to);
00011 char *ToString(uint64_t value, char *to);
00012
00013
00014 char *ToString(int32_t value, char *to);
00015 char *ToString(int64_t value, char *to);
00016
00017
00018 char *ToString(uint16_t value, char *to);
00019 char *ToString(int16_t value, char *to);
00020
00021 char *ToString(const void *value, char *to);
00022
00023 inline char *ToString(bool value, char *to) {
00024 *to++ = '0' + value;
00025 return to;
00026 }
00027
00028
00029
00030
00031
00032 template <class T> struct ToStringBuf;
00033 template <> struct ToStringBuf<bool> {
00034 enum { kBytes = 1 };
00035 };
00036 template <> struct ToStringBuf<uint16_t> {
00037 enum { kBytes = 5 };
00038 };
00039 template <> struct ToStringBuf<int16_t> {
00040 enum { kBytes = 6 };
00041 };
00042 template <> struct ToStringBuf<uint32_t> {
00043 enum { kBytes = 10 };
00044 };
00045 template <> struct ToStringBuf<int32_t> {
00046 enum { kBytes = 11 };
00047 };
00048 template <> struct ToStringBuf<uint64_t> {
00049 enum { kBytes = 20 };
00050 };
00051 template <> struct ToStringBuf<int64_t> {
00052
00053 enum { kBytes = 20 };
00054 };
00055
00056 template <> struct ToStringBuf<const void*> {
00057
00058 enum { kBytes = sizeof(const void*) * 2 + 2 };
00059 };
00060
00061
00062 enum { kToStringMaxBytes = 20 };
00063
00064 }
00065
00066 #endif // UTIL_INTEGER_TO_STRING_H