susumu.yata
null+****@clear*****
Wed Jun 4 10:51:49 JST 2014
susumu.yata 2014-06-04 10:51:49 +0900 (Wed, 04 Jun 2014) New Revision: 0a932de76cb2e9e1a5d9094349d9e79f9763ae12 https://github.com/groonga/grnxx/commit/0a932de76cb2e9e1a5d9094349d9e79f9763ae12 Message: Add SorterBuilder. Copied files: new-interface/sorter-builder.hpp (from new-interface/sorter.hpp) Modified files: new-interface/sorter.hpp Copied: new-interface/sorter-builder.hpp (+7 -13) 74% =================================================================== --- new-interface/sorter.hpp 2014-06-04 10:51:03 +0900 (03f60bc) +++ new-interface/sorter-builder.hpp 2014-06-04 10:51:49 +0900 (94c94fc) @@ -18,9 +18,6 @@ class Sorter { // 所属するテーブルを取得する. virtual Table *table() const = 0; - // TODO: 条件を一気に設定するようにした方が使いやすい可能性がある. - // その場合, Table::create_sorter() で指定することも考慮すべきである. - // 前提条件を追加する. // 成功すれば true を返す. // 失敗したときは *error にその内容を格納し, false を返す. @@ -49,19 +46,16 @@ class Sorter { SortOrder order, Error *error) const = 0; - // 行の一覧を整列する. - // 成功すれば true を返す. - // 失敗したときは *error にその内容を格納し, false を返す. - // - // 整列の結果が保証されるのは [offset, offset + limit) の範囲である. - // なお,行 ID を整列条件に加えれば安定な整列になる. + // すべての条件を破棄する. + virtual void clear(); + + // 指定された条件に対応する整列器を作成する. + // 成功すれば有効なオブジェクトへのポインタを返す. + // 失敗したときは *error にその内容を格納し, nullptr を返す. // // 失敗する状況としては,以下のようなものが挙げられる. - // - 演算において例外が発生する. // - リソースを確保できない. - virtual bool sort(int64_t num_row_ids, RowID *row_ids, - int64_t offset, int64_t limit, - Error *error); + virtual std::unique_ptr<Sorter> create_sorter(Error *error) const; }; } // namespace grnxx Modified: new-interface/sorter.hpp (+0 -36) =================================================================== --- new-interface/sorter.hpp 2014-06-04 10:51:03 +0900 (03f60bc) +++ new-interface/sorter.hpp 2014-06-04 10:51:49 +0900 (4419c20) @@ -5,11 +5,6 @@ namespace grnxx { -enum SortOrder { - ASCENDING_ORDER, - DESCENDING_ORDER -}; - class Sorter { public: Sorter(); @@ -18,37 +13,6 @@ class Sorter { // 所属するテーブルを取得する. virtual Table *table() const = 0; - // TODO: 条件を一気に設定するようにした方が使いやすい可能性がある. - // その場合, Table::create_sorter() で指定することも考慮すべきである. - - // 前提条件を追加する. - // 成功すれば true を返す. - // 失敗したときは *error にその内容を格納し, false を返す. - // - // 何らかの条件にしたがって整列済みのときに指定する. - // 新しい条件は末尾に追加される. - // - // 失敗する状況としては,以下のようなものが挙げられる. - // - 式の評価結果が大小関係を持たない型になる. - // - リソースを確保できない. - virtual bool add_precondition(const Expression *expression, - SortOrder order, - Error *error) const = 0; - - // 整列条件を追加する. - // 成功すれば true を返す. - // 失敗したときは *error にその内容を格納し, false を返す. - // - // 新しい条件は末尾に追加されるため, - // 優先順位の高い整列条件から順に追加しなければならない. - // - // 失敗する状況としては,以下のようなものが挙げられる. - // - 式の評価結果が大小関係を持たない型になる. - // - リソースを確保できない. - virtual bool add_condition(const Expression *expression, - SortOrder order, - Error *error) const = 0; - // 行の一覧を整列する. // 成功すれば true を返す. // 失敗したときは *error にその内容を格納し, false を返す. -------------- next part -------------- HTML����������������������������... ダウンロード