[Groonga-commit] groonga/groonga at 62ac7ff [master] egn: update TableCursor to support default score.

Back to archive index

susumu.yata null+****@clear*****
Fri Jun 19 12:43:10 JST 2015


susumu.yata	2015-06-19 12:43:10 +0900 (Fri, 19 Jun 2015)

  New Revision: 62ac7ff63387c531b8fe959471d1ed598c9a34ba
  https://github.com/groonga/groonga/commit/62ac7ff63387c531b8fe959471d1ed598c9a34ba

  Message:
    egn: update TableCursor to support default score.

  Modified files:
    lib/egn.cpp

  Modified: lib/egn.cpp (+45 -10)
===================================================================
--- lib/egn.cpp    2015-06-19 10:29:58 +0900 (e5458f6)
+++ lib/egn.cpp    2015-06-19 12:43:10 +0900 (28f83a0)
@@ -39,6 +39,23 @@ namespace {
 
 enum { GRN_EGN_MAX_BATCH_SIZE = 1024 };
 
+bool grn_egn_is_table_cursor(grn_obj *obj) {
+  if (!obj) {
+    return false;
+  }
+  switch (obj->header.type) {
+    case GRN_CURSOR_TABLE_PAT_KEY:
+    case GRN_CURSOR_TABLE_DAT_KEY:
+    case GRN_CURSOR_TABLE_HASH_KEY:
+    case GRN_CURSOR_TABLE_NO_KEY: {
+      return true;
+    }
+    default: {
+      return false;
+    }
+  }
+}
+
 bool grn_egn_is_table(grn_obj *obj) {
   if (!obj) {
     return false;
@@ -63,19 +80,40 @@ namespace egn {
 
 // -- TableCursor --
 
+// TableCursor is a wrapper for grn_table_cursor:
+// - GRN_CURSOR_PAT_KEY
+// - GRN_CURSOR_DAT_KEY
+// - GRN_CURSOR_HASH_KEY
+// - GRN_CURSOR_NO_KEY
 class TableCursor : public Cursor {
  public:
-  TableCursor(grn_ctx *ctx, grn_table_cursor *cursor)
-    : Cursor(), ctx_(ctx), cursor_(cursor) {}
   ~TableCursor() {
     grn_table_cursor_close(ctx_, cursor_);
   }
 
+  static grn_rc open(grn_ctx *ctx, grn_obj *cursor, Score default_score,
+                     Cursor **wrapper) {
+    if (!ctx || !grn_egn_is_table_cursor(cursor) || !wrapper) {
+      return GRN_INVALID_ARGUMENT;
+    }
+    TableCursor *new_wrapper =
+      new (std::nothrow) TableCursor(ctx, cursor, default_score);
+    if (!new_wrapper) {
+      return GRN_NO_MEMORY_AVAILABLE;
+    }
+    *wrapper = new_wrapper;
+    return GRN_SUCCESS;
+  }
+
   grn_rc read(Record *records, size_t size, size_t *count);
 
  private:
   grn_ctx *ctx_;
-  grn_table_cursor *cursor_;
+  grn_obj *cursor_;
+  Score default_score_;
+
+  TableCursor(grn_ctx *ctx, grn_obj *cursor, Score default_score)
+    : Cursor(), ctx_(ctx), cursor_(cursor), default_score_(default_score) {}
 };
 
 grn_rc TableCursor::read(Record *records, size_t size, size_t *count) {
@@ -89,8 +127,7 @@ grn_rc TableCursor::read(Record *records, size_t size, size_t *count) {
       return GRN_SUCCESS;
     }
     records[i].id = id;
-    // FIXME: The default score should be configurable (e.g. 1.0)?
-    records[i].score = 0.0;
+    records[i].score = default_score_;
   }
   *count = size;
   return GRN_SUCCESS;
@@ -109,13 +146,11 @@ grn_rc Cursor::open_table_cursor(
   if (!table_cursor) {
     return ctx->rc;
   }
-  Cursor *new_cursor = new (std::nothrow) TableCursor(ctx, table_cursor);
-  if (!new_cursor) {
+  grn_rc rc = TableCursor::open(ctx, table_cursor, 0.0, cursor);
+  if (rc != GRN_SUCCESS) {
     grn_table_cursor_close(ctx, table_cursor);
-    return GRN_NO_MEMORY_AVAILABLE;
   }
-  *cursor = new_cursor;
-  return GRN_SUCCESS;
+  return rc;
 }
 
 grn_rc Cursor::read(Record *records, size_t size, size_t *count) {
-------------- next part --------------
HTML����������������������������...
Download 



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