[Groonga-commit] groonga/groonga [master] [geo] make minimum reduce bit customizable. refs #1173

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 18日 (金) 17:16:15 JST


Kouhei Sutou	2011-11-18 08:16:15 +0000 (Fri, 18 Nov 2011)

  New Revision: 5868d0204658dd11ad61d4f757f0c361a7b7db2c

  Log:
    [geo] make minimum reduce bit customizable. refs #1173

  Modified files:
    lib/geo.c
    lib/geo.h

  Modified: lib/geo.c (+16 -2)
===================================================================
--- lib/geo.c    2011-11-18 07:50:14 +0000 (a1a7855)
+++ lib/geo.c    2011-11-18 08:16:15 +0000 (4dd8047)
@@ -22,6 +22,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#define GEO_KEY_MAX_BITS 64
+
 typedef struct {
   grn_id id;
   double d;
@@ -1089,6 +1091,17 @@ grn_geo_cursor_open_in_rectangle(grn_ctx *ctx,
       (data.min.longitude == data.top_left->longitude &&
        data.max.longitude == data.bottom_right->longitude);
   }
+  {
+    const char *minimum_reduce_bit_env;
+    cursor->minimum_reduce_bit = 0;
+    minimum_reduce_bit_env = getenv("GRN_GEO_IN_RECTANGLE_MINIMUM_REDUCE_BIT");
+    if (minimum_reduce_bit_env) {
+      cursor->minimum_reduce_bit = atoi(minimum_reduce_bit_env);
+    }
+    if (cursor->minimum_reduce_bit < 1) {
+      cursor->minimum_reduce_bit = 1;
+    }
+  }
 
 exit :
   grn_obj_unlink(ctx, &(data.top_left_point_buffer));
@@ -1133,6 +1146,7 @@ grn_geo_cursor_entry_next(grn_ctx *ctx,
 {
   uint8_t *top_left_key = cursor->top_left_key;
   uint8_t *bottom_right_key = cursor->bottom_right_key;
+  int max_target_bit = GEO_KEY_MAX_BITS - cursor->minimum_reduce_bit;
 
   if (cursor->current_entry < 0) {
     return GRN_FALSE;
@@ -1149,9 +1163,9 @@ grn_geo_cursor_entry_next(grn_ctx *ctx,
     inspect_cursor_entry(ctx, entry);
 #endif
 
-    if (entry->target_bit >= 63) {
+    if (entry->target_bit >= max_target_bit) {
 #ifdef GEO_DEBUG
-      printf("only 1 entry is remained\n");
+      printf("%d: force stopping to reduce a mesh\n", entry->target_bit);
 #endif
       break;
     }

  Modified: lib/geo.h (+1 -0)
===================================================================
--- lib/geo.h    2011-11-18 07:50:14 +0000 (8ccfb73)
+++ lib/geo.h    2011-11-18 08:16:15 +0000 (2e14908)
@@ -94,6 +94,7 @@ struct _grn_geo_cursor_in_rectangle {
   int rest;
   grn_geo_cursor_entry entries[64];
   int current_entry;
+  int minimum_reduce_bit;
 };
 
 grn_rc grn_geo_cursor_close(grn_ctx *ctx, grn_obj *geo_cursor);




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