From 595aab75554bcca95c5612be08803ec082f771c5 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Wed, 9 Nov 2011 00:54:27 +0000 Subject: [PATCH] enhanced a few code segments that convert a digit to a number --- qse/lib/awk/Awk.cpp | 8 ++++---- qse/lib/cmn/assert.c | 2 +- qse/lib/cmn/fmt.c | 20 ++++++++++---------- qse/lib/cmn/utf8.c | 2 +- qse/lib/net/htrd.c | 5 +---- qse/lib/sed/sed.c | 18 ++++++------------ qse/samples/cmn/fmt01.c | 1 + qse/samples/cmn/fmt02.c | 1 + 8 files changed, 25 insertions(+), 32 deletions(-) diff --git a/qse/lib/awk/Awk.cpp b/qse/lib/awk/Awk.cpp index 1344b64e..8faf9751 100644 --- a/qse/lib/awk/Awk.cpp +++ b/qse/lib/awk/Awk.cpp @@ -189,12 +189,12 @@ Awk::Value::IntIndex::IntIndex (long_t x) ptr = buf; len = 0; -#define NTOC(n) ((n) + QSE_T('0')) +#define NTOC(n) (QSE_T("0123456789")[n]) int base = 10; - long_t last = x % base; - long_t y = 0; - int dig = 0; + long_t last = x % base; + long_t y = 0; + int dig = 0; if (x < 0) buf[len++] = QSE_T('-'); diff --git a/qse/lib/cmn/assert.c b/qse/lib/cmn/assert.c index c37d8e79..7a1912f9 100644 --- a/qse/lib/cmn/assert.c +++ b/qse/lib/cmn/assert.c @@ -43,7 +43,7 @@ # include "syscall.h" #endif -#define NTOC(n) (((n) >= 10)? (((n) - 10) + QSE_T('A')): (n) + QSE_T('0')) +#define NTOC(n) (QSE_T("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")[n]) #define WRITE_CHAR(c) \ do { \ qse_char_t __xxx_c = c; \ diff --git a/qse/lib/cmn/fmt.c b/qse/lib/cmn/fmt.c index 3adf7335..89f35a3b 100644 --- a/qse/lib/cmn/fmt.c +++ b/qse/lib/cmn/fmt.c @@ -30,20 +30,20 @@ static int fmt_unsigned_to_mbs ( qse_mchar_t tmp[(QSE_SIZEOF(qse_uintmax_t) * 8)]; int reslen, base, xsize, reqlen, pflen; qse_mchar_t* p, * bp, * be; - qse_mchar_t xbasechar; + const qse_mchar_t* xbasestr; base = base_and_flags & 0xFF; if (base < 2 || base > 36) return -1; - xbasechar = (base_and_flags & QSE_FMTINTMAXTOMBS_UPPERCASE)? QSE_MT('A'): QSE_MT('a'); + xbasestr = (base_and_flags & QSE_FMTINTMAXTOMBS_UPPERCASE)? + QSE_MT("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"): + QSE_MT("0123456789abcdefghijklmnopqrstuvwxyz"); /* store the resulting numeric string into 'tmp' first */ p = tmp; do { - int digit = value % base; - if (digit < 10) *p++ = digit + QSE_MT('0'); - else *p++ = digit + xbasechar - 10; + *p++ = xbasestr[value % base]; value /= base; } while (value > 0); @@ -210,20 +210,20 @@ static int fmt_unsigned_to_wcs ( qse_wchar_t tmp[(QSE_SIZEOF(qse_uintmax_t) * 8)]; int reslen, base, xsize, reqlen, pflen; qse_wchar_t* p, * bp, * be; - qse_wchar_t xbasechar; + const qse_wchar_t* xbasestr; base = base_and_flags & 0xFF; if (base < 2 || base > 36) return -1; - xbasechar = (base_and_flags & QSE_FMTINTMAXTOWCS_UPPERCASE)? QSE_WT('A'): QSE_WT('a'); + xbasestr = (base_and_flags & QSE_FMTINTMAXTOWCS_UPPERCASE)? + QSE_WT("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"): + QSE_WT("0123456789abcdefghijklmnopqrstuvwxyz"); /* store the resulting numeric string into 'tmp' first */ p = tmp; do { - int digit = value % base; - if (digit < 10) *p++ = digit + QSE_WT('0'); - else *p++ = digit + xbasechar - 10; + *p++ = xbasestr[value % base]; value /= base; } while (value > 0); diff --git a/qse/lib/cmn/utf8.c b/qse/lib/cmn/utf8.c index a88f1dc5..d86ae9a5 100644 --- a/qse/lib/cmn/utf8.c +++ b/qse/lib/cmn/utf8.c @@ -1,5 +1,5 @@ /* - * $Id: utf8.c 50 2009-02-10 05:48:05Z hyunghwan.chung $ + * $Id$ * Copyright 2006-2011 Chung, Hyung-Hwan. This file is part of QSE. diff --git a/qse/lib/net/htrd.c b/qse/lib/net/htrd.c index 46250909..81cb6818 100644 --- a/qse/lib/net/htrd.c +++ b/qse/lib/net/htrd.c @@ -77,10 +77,7 @@ static QSE_INLINE int digit_to_num (qse_mchar_t c) static QSE_INLINE int xdigit_to_num (qse_mchar_t c) { - if (c >= QSE_MT('0') && c <= QSE_MT('9')) return c - QSE_MT('0'); - if (c >= QSE_MT('A') && c <= QSE_MT('Z')) return c - QSE_MT('A') + 10; - if (c >= QSE_MT('a') && c <= QSE_MT('z')) return c - QSE_MT('a') + 10; - return -1; + return QSE_MXDIGITTONUM (c); } diff --git a/qse/lib/sed/sed.c b/qse/lib/sed/sed.c index d621563d..e748eb14 100644 --- a/qse/lib/sed/sed.c +++ b/qse/lib/sed/sed.c @@ -598,13 +598,6 @@ static void free_all_cids (qse_sed_t* sed) } } -static QSE_INLINE int xdigit_to_num (qse_cint_t c) -{ - return (c >= QSE_T('0') && c <= QSE_T('9'))? (c - QSE_T('0')): - (c >= QSE_T('A') && c <= QSE_T('F'))? (c - QSE_T('A') + 10): - (c >= QSE_T('a') && c <= QSE_T('f'))? (c - QSE_T('a') + 10): -1; -} - static int trans_escaped (qse_sed_t* sed, qse_cint_t c, qse_cint_t* ec, int* xamp) { if (xamp) *xamp = 0; @@ -643,13 +636,13 @@ Omitted for clash with regular expression \b. qse_cint_t peeped; PEEPNXTSC (sed, peeped, -1); - cc = xdigit_to_num (peeped); + cc = QSE_XDIGITTONUM (peeped); if (cc <= -1) break; NXTSC (sed, peeped, -1); /* consume the character peeped */ c = cc; PEEPNXTSC (sed, peeped, -1); - cc = xdigit_to_num (peeped); + cc = QSE_XDIGITTONUM (peeped); if (cc <= -1) break; NXTSC (sed, peeped, -1); /* consume the character peeped */ c = (c << 4) | cc; @@ -667,7 +660,7 @@ Omitted for clash with regular expression \b. qse_cint_t peeped; PEEPNXTSC (sed, peeped, -1); - cc = xdigit_to_num (peeped); + cc = QSE_XDIGITTONUM (peeped); if (cc <= -1) break; NXTSC (sed, peeped, -1); /* consume the character peeped */ c = cc; @@ -675,7 +668,7 @@ Omitted for clash with regular expression \b. for (i = 1; i < QSE_SIZEOF(qse_char_t) * 2; i++) { PEEPNXTSC (sed, peeped, -1); - cc = xdigit_to_num (peeped); + cc = QSE_XDIGITTONUM (peeped); if (cc <= -1) break; NXTSC (sed, peeped, -1); /* consume the character peeped */ c = (c << 4) | cc; @@ -2120,7 +2113,8 @@ static int write_first_line ( return 0; } -#define NTOC(n) (((n) >= 10)? (((n) - 10) + QSE_T('A')): (n) + QSE_T('0')) +#define NTOC(n) (QSE_T("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")[n]) + static int write_num (qse_sed_t* sed, qse_ulong_t x, int base, int width) { qse_ulong_t last = x % base; diff --git a/qse/samples/cmn/fmt01.c b/qse/samples/cmn/fmt01.c index f6d9af7c..eb7da95b 100644 --- a/qse/samples/cmn/fmt01.c +++ b/qse/samples/cmn/fmt01.c @@ -1,5 +1,6 @@ #include #include +#include static int test_main (int argc, qse_char_t* argv[], qse_char_t* envp[]) { diff --git a/qse/samples/cmn/fmt02.c b/qse/samples/cmn/fmt02.c index 56bbbf0f..7eb98998 100644 --- a/qse/samples/cmn/fmt02.c +++ b/qse/samples/cmn/fmt02.c @@ -1,5 +1,6 @@ #include #include +#include static int test_main (int argc, qse_char_t* argv[], qse_char_t* envp[]) {