Navigation Menu

Skip to content

Commit

Permalink
Update grnxx::Merger.
Browse files Browse the repository at this point in the history
  • Loading branch information
s-yata committed Jun 19, 2014
1 parent b19229f commit bfe2533
Showing 1 changed file with 49 additions and 25 deletions.
74 changes: 49 additions & 25 deletions new-interface/merger.hpp
Expand Up @@ -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
Expand Down

0 comments on commit bfe2533

Please sign in to comment.