Kouhei Sutou
null+****@clear*****
Fri Apr 17 18:02:08 JST 2015
Kouhei Sutou 2015-04-17 18:02:08 +0900 (Fri, 17 Apr 2015) New Revision: 10bdc8a3bf0ed8f1fc8a6a665f4dccb083d689e2 https://github.com/groonga/groonga/commit/10bdc8a3bf0ed8f1fc8a6a665f4dccb083d689e2 Message: Add grn_atoull() Modified files: lib/grn_str.h lib/str.c test/unit/util/test-string.c Modified: lib/grn_str.h (+1 -0) =================================================================== --- lib/grn_str.h 2015-04-17 17:47:33 +0900 (ade8c04) +++ lib/grn_str.h 2015-04-17 18:02:08 +0900 (e6fab61) @@ -54,6 +54,7 @@ GRN_API int grn_atoi(const char *nptr, const char *end, const char **rest); GRN_API unsigned int grn_atoui(const char *nptr, const char *end, const char **rest); unsigned int grn_htoui(const char *nptr, const char *end, const char **rest); GRN_API int64_t grn_atoll(const char *nptr, const char *end, const char **rest); +GRN_API uint64_t grn_atoull(const char *nptr, const char *end, const char **rest); grn_rc grn_itoa(int i, char *p, char *end, char **rest); grn_rc grn_lltoa(int64_t i, char *p, char *end, char **rest); grn_rc grn_ulltoa(uint64_t i, char *p, char *end, char **rest); Modified: lib/str.c (+14 -0) =================================================================== --- lib/str.c 2015-04-17 17:47:33 +0900 (71b6df5) +++ lib/str.c 2015-04-17 18:02:08 +0900 (6127c4b) @@ -1500,6 +1500,20 @@ grn_atoll(const char *nptr, const char *end, const char **rest) return n ? -v : v; } +uint64_t +grn_atoull(const char *nptr, const char *end, const char **rest) +{ + uint64_t v = 0, t; + while (nptr < end && *nptr >= '0' && *nptr <= '9') { + t = v * 10 + (*nptr - '0'); + if (t < v) { v = 0; break; } + v = t; + nptr++; + } + if (rest) { *rest = nptr; } + return v; +} + unsigned int grn_htoui(const char *nptr, const char *end, const char **rest) { Modified: test/unit/util/test-string.c (+38 -0) =================================================================== --- test/unit/util/test-string.c 2015-04-17 17:47:33 +0900 (d275f88) +++ test/unit/util/test-string.c 2015-04-17 18:02:08 +0900 (8ab8bb7) @@ -52,6 +52,8 @@ void data_str_len(void); void test_str_len(gconstpointer data); void data_aton(void); void test_aton(gconstpointer data); +void data_atoull(void); +void test_atoull(gconstpointer data); void data_itoh(void); void test_itoh(gconstpointer data); @@ -1003,6 +1005,42 @@ test_aton(gconstpointer data) } void +data_atoull(void) +{ +#define ADD_DATUM(label, expected, input) \ + gcut_add_datum(label " - " #expected, \ + "expected", G_TYPE_UINT64, expected, \ + "input", G_TYPE_STRING, input, \ + NULL) + + ADD_DATUM("uint32 max", + G_GUINT64_CONSTANT(4294967295), + "4294967295"); + ADD_DATUM("int64 max", + G_GUINT64_CONSTANT(344494643000000), + "344494643000000"); + ADD_DATUM("uint64 max", + G_GUINT64_CONSTANT(18446744073709551615), + "18446744073709551615"); + +#undef ADD_DATUM +} + +void +test_atoull(gconstpointer data) +{ + const gchar *input, *input_end, *rest; + uint64_t value; + + input = gcut_data_get_string(data, "input"); + input_end = strchr(input, '\0'); + value = grn_atoull(input, input_end, &rest); + cut_assert_equal_string(input_end, rest); + gcut_assert_equal_uint64(gcut_data_get_uint64(data, "expected"), + value); +} + +void data_itoh(void) { #define ADD_DATUM(label, expected, input, length) \ -------------- next part -------------- HTML����������������������������... 下载