[Groonga-commit] groonga/grnxx at bfe2533 [master] Update grnxx::Merger.

Back to archive index

susumu.yata null+****@clear*****
Thu Jun 19 13:11:17 JST 2014


susumu.yata	2014-06-19 13:11:17 +0900 (Thu, 19 Jun 2014)

  New Revision: bfe2533861f3363568c8be1aee23627021a934aa
  https://github.com/groonga/grnxx/commit/bfe2533861f3363568c8be1aee23627021a934aa

  Message:
    Update grnxx::Merger.

  Modified files:
    new-interface/merger.hpp

  Modified: new-interface/merger.hpp (+49 -25)
===================================================================
--- new-interface/merger.hpp    2014-06-19 10:43:28 +0900 (92fb896)
+++ new-interface/merger.hpp    2014-06-19 13:11:17 +0900 (6cfaf66)
@@ -5,42 +5,66 @@
 
 namespace grnxx {
 
-enum MergeStatus {
-  MERGE_CONTINUE,
-  MERGE_FINISH
-};
-
 class Merger {
  public:
   Merger();
   virtual ~Merger();
 
-  // 所属するテーブルを取得する.
-  virtual Table *table() const = 0;
+  // 合成の入出力となるレコードの一覧を設定する.
+  // 成功すれば true を返す.
+  // 失敗したときは *error にその内容を格納し, false を返す.
+  //
+  // 合成の途中で呼び出したときは,途中経過を破棄して新たな合成を開始する.
+  //
+  // 失敗する状況としては,以下のようなものが挙げられる.
+  // - 不正なレコードの一覧が指定された.
+  virtual bool reset(Error *error,
+                     RecordSet *lhs_record_set,
+                     RecordSet *rhs_record_set,
+                     RecordSet *result_record_set);
 
-  // 行の一覧を合成する.
-  // 成功すれば出力された行数を返す.
-  // 失敗したときは *error にその内容を格納し, -1 を返す.
+  // 合成を進める.
+  // 成功すれば true を返す.
+  // 失敗したときは *error にその内容を格納し, false を返す.
   //
-  // 入力がまだ残っているときは MERGE_CONTINUE,
-  // 入力がもう残っていないときは MERGE_FINISH を指定する.
+  // 入力が行 ID 順でないなど,入力がすべて揃ってからでなければ
+  // 合成に取り掛かれないときは何もせずに成功する.
   //
-  // lhs_record_set, rhs_record_set を入力として,
-  // 合成した結果を result_record_set に出力する.
-  // 合成に使用された行は lhs_record_set, rhs_record_set から取り除かれる.
-  // そのため,空になった方の入力に行を補充することで合成を継続できる.
+  // 失敗する状況としては,以下のようなものが挙げられる.
+  // - 入出力が設定されていない.
+  // - 合成が既に完了している.
+  // - 演算で例外が発生する.
+  // - 不正なレコードの一覧が指定された.
+  virtual bool progress(Error *error) = 0;
+
+  // 合成の仕上げをおこなう.
+  // 成功すれば true を返す.
+  // 失敗したときは *error にその内容を格納し, false を返す.
+  //
+  // 入力がすべて揃ったものとして合成の仕上げをおこなう.
+  // offset, limit の指定があるときは,有効な範囲だけが残る.
+  //
+  // 失敗する状況としては,以下のようなものが挙げられる.
+  // - 入出力が設定されていない.
+  // - 合成が既に完了している.
+  // - 演算で例外が発生する.
+  // - リソースを確保できない.
+  virtual bool finish(Error *error) = 0;
+
+  // レコードの一覧を合成する.
+  // 成功すれば true を返す.
+  // 失敗したときは *error にその内容を格納し, false を返す.
   //
-  // 入力は行 ID 昇順もしくは降順になっているものとする.
-  // また,入力はそれぞれ重複を含まないものとする.
+  // reset(), finish() を呼び出すことで合成をおこなう.
   //
   // 失敗する状況としては,以下のようなものが挙げられる.
-  // - スコアが合成によって不正な値になる.
-  // - リソースが確保できない.
-  virtual int64_t merge(Error *error,
-                        RecordSet *lhs_record_set,
-                        RecordSet *rhs_record_set,
-                        RecordSet *result_record_set,
-                        MergeStatus status) const = 0;
+  // - 不正なレコードの一覧が指定された.
+  // - 演算で例外が発生する.
+  // - リソースを確保できない.
+  virtual bool merge(Error *error,
+                     RecordSet *lhs_record_set,
+                     RecordSet *rhs_record_set,
+                     RecordSet *result_record_set,
 };
 
 }  // namespace grnxx
-------------- next part --------------
HTML����������������������������...
Download 



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