00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <config.h>
00041
00042 #include "m_string.h"
00043
00044 namespace drizzled
00045 {
00046 namespace internal
00047 {
00048
00049 #if !defined(int64_t2str) && !defined(HAVE_LONGLONG2STR)
00050
00051 char _dig_vec_upper[] =
00052 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
00053
00054
00055
00056
00057
00058 char *int64_t2str(int64_t val,char *dst,int radix)
00059 {
00060 char buffer[65];
00061 long long_val;
00062 uint64_t uval= (uint64_t) val;
00063
00064 if (radix < 0)
00065 {
00066 if (radix < -36 || radix > -2) return (char*) 0;
00067 if (val < 0) {
00068 *dst++ = '-';
00069
00070 uval = (uint64_t)0 - uval;
00071 }
00072 radix = -radix;
00073 }
00074 else
00075 {
00076 if (radix > 36 || radix < 2) return (char*) 0;
00077 }
00078 if (uval == 0)
00079 {
00080 *dst++='0';
00081 *dst='\0';
00082 return dst;
00083 }
00084 char* p = &buffer[sizeof(buffer)-1];
00085 *p = '\0';
00086
00087 while (uval > (uint64_t) LONG_MAX)
00088 {
00089 uint64_t quo= uval/(uint32_t) radix;
00090 uint32_t rem= (uint32_t) (uval- quo* (uint32_t) radix);
00091 *--p = _dig_vec_upper[rem];
00092 uval= quo;
00093 }
00094 long_val= (long) uval;
00095 while (long_val != 0)
00096 {
00097 long quo= long_val/radix;
00098 *--p = _dig_vec_upper[(unsigned char) (long_val - quo*radix)];
00099 long_val= quo;
00100 }
00101 while ((*dst++ = *p++) != 0) ;
00102 return dst-1;
00103 }
00104
00105 #endif
00106
00107 #ifndef int64_t10_to_str
00108 char *int64_t10_to_str(int64_t val,char *dst,int radix)
00109 {
00110 char buffer[65];
00111 long long_val;
00112 uint64_t uval= (uint64_t) val;
00113
00114 if (radix < 0)
00115 {
00116 if (val < 0)
00117 {
00118 *dst++ = '-';
00119
00120 uval = (uint64_t)0 - uval;
00121 }
00122 }
00123
00124 if (uval == 0)
00125 {
00126 *dst++='0';
00127 *dst='\0';
00128 return dst;
00129 }
00130 char* p = &buffer[sizeof(buffer)-1];
00131 *p = '\0';
00132
00133 while (uval > (uint64_t) LONG_MAX)
00134 {
00135 uint64_t quo= uval/(uint32_t) 10;
00136 uint32_t rem= (uint32_t) (uval- quo* (uint32_t) 10);
00137 *--p = _dig_vec_upper[rem];
00138 uval= quo;
00139 }
00140 long_val= (long) uval;
00141 while (long_val != 0)
00142 {
00143 long quo= long_val/10;
00144 *--p = _dig_vec_upper[(unsigned char) (long_val - quo*10)];
00145 long_val= quo;
00146 }
00147 while ((*dst++ = *p++) != 0) ;
00148 return dst-1;
00149 }
00150 #endif
00151
00152 }
00153 }