[Groonga-commit] groonga/groonga at 10bdc8a [master] Add grn_atoull()

Back to archive index

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����������������������������...
下载 



More information about the Groonga-commit mailing list
Back to archive index