[Groonga-commit] groonga/groonga [master] show geo point encoded byte string in inspection.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 8月 3日 (火) 15:24:38 JST


Kouhei Sutou	2010-08-03 06:24:38 +0000 (Tue, 03 Aug 2010)

  New Revision: 3b493e2277b90eed36129fd2625494084326ec80

  Log:
    show geo point encoded byte string in inspection.

  Modified files:
    lib/groonga_in.h
    lib/pat.c
    lib/util.c
    test/unit/core/test-inspect.c
    test/unit/core/test-table-patricia-trie-cursor.c

  Modified: lib/groonga_in.h (+37 -0)
===================================================================
--- lib/groonga_in.h    2010-08-02 09:20:09 +0000 (c77efc6)
+++ lib/groonga_in.h    2010-08-03 06:24:38 +0000 (933dff3)
@@ -511,6 +511,43 @@ grn_str_greater(const uint8_t *ap, uint32_t as, const uint8_t *bp, uint32_t bs)
 #endif /* WORDS_BIGENDIAN */
 #define grn_ntoh grn_hton
 
+#define grn_gton(keybuf,key,size)\
+{\
+  uint8_t *keybuf_ = keybuf;\
+  const void *key_ = key;\
+  int la = ((grn_geo_point *)key_)->latitude;\
+  int lo = ((grn_geo_point *)key_)->longitude;\
+  uint8_t *p = keybuf_;\
+  int i = 32;\
+  while (i) {\
+    i -= 4;\
+    *p++ = ((((la >> i) & 8) << 4) + (((lo >> i) & 8) << 3) +\
+            (((la >> i) & 4) << 3) + (((lo >> i) & 4) << 2) +\
+            (((la >> i) & 2) << 2) + (((lo >> i) & 2) << 1) +\
+            (((la >> i) & 1) << 1) + (((lo >> i) & 1) << 0));\
+  }\
+}
+
+#define grn_ntog(keybuf,key,size)\
+{\
+  uint8_t *keybuf_ = keybuf;\
+  uint8_t *key_ = key;\
+  uint32_t size_ = size;\
+  int la = 0, lo = 0;\
+  uint8_t v, *p = key_;\
+  int i = 32;\
+  while (size_--) {\
+    i -= 4;\
+    v = *p++;\
+    la += (((v & 128) >> 4) + ((v &  32) >> 3) +\
+           ((v &   8) >> 2) + ((v &   2) >> 1)) << i;\
+    lo += (((v &  64) >> 3) + ((v &  16) >> 2) +\
+           ((v &   4) >> 1) + ((v &   1) >> 0)) << i;\
+  }\
+  ((grn_geo_point *)keybuf_)->latitude = la;\
+  ((grn_geo_point *)keybuf_)->longitude = lo;\
+}
+
 #ifdef USE_FUTEX
 #include <linux/futex.h>
 #include <sys/syscall.h>

  Modified: lib/pat.c (+0 -34)
===================================================================
--- lib/pat.c    2010-08-02 09:20:09 +0000 (a3492e3)
+++ lib/pat.c    2010-08-03 06:24:38 +0000 (40e503f)
@@ -679,40 +679,6 @@ chop(grn_ctx *ctx, grn_pat *pat, const char **key, const char *end, uint32_t *lk
   }
 }
 
-static void
-grn_gton(uint8_t *keybuf, const void *key, uint32_t size)
-{
-  int la = ((grn_geo_point *)key)->latitude;
-  int lo = ((grn_geo_point *)key)->longitude;
-  uint8_t *p = keybuf;
-  int i = 32;
-  while (i) {
-    i -= 4;
-    *p++ = ((((la >> i) & 8) << 4) + (((lo >> i) & 8) << 3) +
-            (((la >> i) & 4) << 3) + (((lo >> i) & 4) << 2) +
-            (((la >> i) & 2) << 2) + (((lo >> i) & 2) << 1) +
-            (((la >> i) & 1) << 1) + (((lo >> i) & 1) << 0));
-  }
-}
-
-static void
-grn_ntog(uint8_t *keybuf, uint8_t *key, uint32_t size)
-{
-  int la = 0, lo = 0;
-  uint8_t v, *p = key;
-  int i = 32;
-  while (size--) {
-    i -= 4;
-    v = *p++;
-    la += (((v & 128) >> 4) + ((v &  32) >> 3) +
-           ((v &   8) >> 2) + ((v &   2) >> 1)) << i;
-    lo += (((v &  64) >> 3) + ((v &  16) >> 2) +
-           ((v &   4) >> 1) + ((v &   1) >> 0)) << i;
-  }
-  ((grn_geo_point *)keybuf)->latitude = la;
-  ((grn_geo_point *)keybuf)->longitude = lo;
-}
-
 #define MAX_FIXED_KEY_SIZE (sizeof(int64_t))
 
 #define KEY_NEEDS_CONVERT(pat,size) \

  Modified: lib/util.c (+22 -0)
===================================================================
--- lib/util.c    2010-08-02 09:20:09 +0000 (62e234f)
+++ lib/util.c    2010-08-03 06:24:38 +0000 (9a7cce8)
@@ -400,6 +400,8 @@ grn_geo_point_inspect_point(grn_ctx *ctx, grn_obj *buf, int point)
   GRN_TEXT_PUTS(ctx, buf, ", ");
   grn_text_itoa(ctx, buf, point % 1000);
   GRN_TEXT_PUTS(ctx, buf, ")");
+
+  return GRN_SUCCESS;
 }
 
 static grn_rc
@@ -422,6 +424,26 @@ grn_geo_point_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
   grn_geo_point_inspect_point(ctx, buf, longitude);
   GRN_TEXT_PUTS(ctx, buf, ")");
 
+  {
+    int i, j;
+    grn_geo_point point;
+    uint8_t encoded[sizeof(grn_geo_point)];
+
+    GRN_TEXT_PUTS(ctx, buf, " [");
+    point.latitude = latitude;
+    point.longitude = longitude;
+    grn_gton(encoded, &point, sizeof(grn_geo_point));
+    for (i = 0; i < sizeof(grn_geo_point); i++) {
+      if (i != 0) {
+        GRN_TEXT_PUTS(ctx, buf, " ");
+      }
+      for (j = 0; j < 8; j++) {
+        grn_text_itoa(ctx, buf, (encoded[i] >> (7 - j)) & 1);
+      }
+    }
+    GRN_TEXT_PUTS(ctx, buf, "]");
+  }
+
   GRN_TEXT_PUTS(ctx, buf, "]");
 
   return GRN_SUCCESS;

  Modified: test/unit/core/test-inspect.c (+6 -2)
===================================================================
--- test/unit/core/test-inspect.c    2010-08-02 09:20:09 +0000 (27c62c4)
+++ test/unit/core/test-inspect.c    2010-08-03 06:24:38 +0000 (8af6c4e)
@@ -350,7 +350,9 @@ test_geo_point_tokyo(void)
   GRN_GEO_POINT_SET(context, geo_point_tokyo, takane_latitude, takane_longitude);
   inspected = grn_inspect(context, NULL, geo_point_tokyo);
   cut_assert_equal_string("[(130194581,503802073) "
-                          "((36, 9, 54, 581),(139, 56, 42, 73))]",
+                          "((36, 9, 54, 581),(139, 56, 42, 73)) "
+                          "[00000001 01111110 10100000 00011101 "
+                          "10010110 11100000 11010011 01100011]]",
                           inspected_string());
 }
 
@@ -366,7 +368,9 @@ test_geo_point_wgs84(void)
   GRN_GEO_POINT_SET(context, geo_point_wgs84, takane_latitude, takane_longitude);
   inspected = grn_inspect(context, NULL, geo_point_wgs84);
   cut_assert_equal_string("[(130226900,503769900) "
-                          "((36, 10, 26, 900),(139, 56, 9, 900))]",
+                          "((36, 10, 26, 900),(139, 56, 9, 900)) "
+                          "[00000001 01111110 10100000 00011110 "
+                          "01010110 11001101 10100110 01110000]]",
                           inspected_string());
 }
 

  Modified: test/unit/core/test-table-patricia-trie-cursor.c (+0 -34)
===================================================================
--- test/unit/core/test-table-patricia-trie-cursor.c    2010-08-02 09:20:09 +0000 (9293d63)
+++ test/unit/core/test-table-patricia-trie-cursor.c    2010-08-03 06:24:38 +0000 (5f4185d)
@@ -286,40 +286,6 @@ test_prefix_short_text(gpointer data)
   gcut_assert_equal_list_string(expected_keys, actual_keys);
 }
 
-static void
-grn_gton(uint8_t *keybuf, const void *key, uint32_t size)
-{
-  int la = ((grn_geo_point *)key)->latitude;
-  int lo = ((grn_geo_point *)key)->longitude;
-  uint8_t *p = keybuf;
-  int i = 32;
-  while (i) {
-    i -= 4;
-    *p++ = ((((la >> i) & 8) << 4) + (((lo >> i) & 8) << 3) +
-            (((la >> i) & 4) << 3) + (((lo >> i) & 4) << 2) +
-            (((la >> i) & 2) << 2) + (((lo >> i) & 2) << 1) +
-            (((la >> i) & 1) << 1) + (((lo >> i) & 1) << 0));
-  }
-}
-
-static void
-grn_ntog(uint8_t *keybuf, uint8_t *key, uint32_t size)
-{
-  int la = 0, lo = 0;
-  uint8_t v, *p = key;
-  int i = 32;
-  while (size--) {
-    i -= 4;
-    v = *p++;
-    la += (((v & 128) >> 4) + ((v &  32) >> 3) +
-           ((v &   8) >> 2) + ((v &   2) >> 1)) << i;
-    lo += (((v &  64) >> 3) + ((v &  16) >> 2) +
-           ((v &   4) >> 1) + ((v &   1) >> 0)) << i;
-  }
-  ((grn_geo_point *)keybuf)->latitude = la;
-  ((grn_geo_point *)keybuf)->longitude = lo;
-}
-
 static const gchar *
 geo_byte_parse(const gchar *geo_byte_string)
 {




Groonga-commit メーリングリストの案内
Back to archive index