summaryrefslogtreecommitdiff
path: root/utils/static_utoa.h
diff options
context:
space:
mode:
authorgraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-11 22:40:01 +0000
committergraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-11 22:40:01 +0000
commit23c362c8d0952b9fa40e559f5045744a6b289d25 (patch)
tree855a28e17c2c3b8a25f5fdccbb665fa7645b8ba2 /utils/static_utoa.h
parent83834db0ae728d758e2b572bff80ca56e1eec0e6 (diff)
itoa
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@529 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'utils/static_utoa.h')
-rwxr-xr-xutils/static_utoa.h80
1 files changed, 2 insertions, 78 deletions
diff --git a/utils/static_utoa.h b/utils/static_utoa.h
index fe5f6d92..3af9fbb6 100755
--- a/utils/static_utoa.h
+++ b/utils/static_utoa.h
@@ -2,96 +2,20 @@
#define STATIC_UTOA_H
#include "threadlocal.h"
-
-
-#include <string>
-#include <cstring>
-
-#define DIGIT_LOOKUP_TABLE 0
+#include "utoa.h"
namespace {
-THREADLOCAL char utoa_buf[] = "01234567890123456789"; // to put end of string character at buf[20]
-const unsigned utoa_bufsize=sizeof(utoa_buf);
-const unsigned utoa_bufsizem1=utoa_bufsize-1;
-#ifdef DIGIT_LOOKUP_TABLE
-char digits[] = "0123456789";
-#endif
-}
-
-inline char digit_to_char(int d) {
- return
-#ifdef DIGIT_LOOKUP_TABLE
- digits[d];
-#else
- '0'+d;
-#endif
-}
-
-// returns n in string [return,num); *num=0 yourself before calling if you want a c_str
-inline char *utoa(char *num,unsigned n) {
- if ( !n ) {
- *--num='0';
- } else {
- unsigned rem;
- // 3digit lookup table, divide by 1000 faster?
- while ( n ) {
-#if 1
- rem = n;
- n /= 10;
- rem -= 10*n; // maybe this is faster than mod because we are already dividing
-#else
- rem = n%10; // would optimizer combine these together?
- n = n/10;
-#endif
- *--num = digit_to_char(rem);
- }
- }
- return num;
+THREADLOCAL char utoa_buf[utoa_bufsize]; // to put end of string character at buf[20]
}
inline char *static_utoa(unsigned n) {
return utoa(utoa_buf+utoa_bufsizem1,n);
}
-//returns position of '\0' terminating number written starting at to
-inline char* append_utoa(char *to,unsigned n) {
- char *s=static_utoa(n);
- int ns=(utoa_buf+utoa_bufsize)-s;
- std::memcpy(to,s,ns);
- return to+ns;
-}
-
-// so named to avoid gcc segfault when named itoa
-inline char *itoa(char *p,int n) {
- if (n<0) {
- p=utoa(p,-n); // TODO: check that (unsigned)(-INT_MIN) == 0x1000000 in 2s complement and not == 0
- *--p='-';
- return p;
- } else
- return utoa(p,n);
-}
-
inline char *static_itoa(int n) {
return itoa(utoa_buf+utoa_bufsizem1,n);
}
-
-inline std::string utos(unsigned n) {
- const int bufsz=20;
- char buf[bufsz];
- char *end=buf+bufsz;
- char *p=utoa(end,n);
- return std::string(p,end);
-}
-
-inline std::string itos(int n) {
- const int bufsz=20;
- char buf[bufsz];
- char *end=buf+bufsz;
- char *p=itoa(end,n);
- return std::string(p,end);
-}
-
#ifdef ITOA_SAMPLE
# include <cstdio>
# include <sstream>