susumu.yata
null+****@clear*****
Mon Jun 23 14:59:18 JST 2014
susumu.yata 2014-06-23 14:59:18 +0900 (Mon, 23 Jun 2014) New Revision: 860455e8ab0e362e099d14e7c9e9f2d740e8a9d8 https://github.com/groonga/grnxx/commit/860455e8ab0e362e099d14e7c9e9f2d740e8a9d8 Message: Add grnxx::Order. Added files: new-interface/order.hpp Added: new-interface/order.hpp (+75 -0) 100644 =================================================================== --- /dev/null +++ new-interface/order.hpp 2014-06-23 14:59:18 +0900 (9505dac) @@ -0,0 +1,75 @@ +#ifndef GRNXX_ORDER_HPP +#define GRNXX_ORDER_HPP + +#include "grnxx/types.hpp" + +namespace grnxx { + +enum OrderType { + // 基本的に昇順となる. + REGULAR_ORDER, + + // 基本的に降順となる. + REVERSE_ORDER + + // 浮動小数点数については,単項演算子 '-' を使うことで降順にできる. + // 整数については,最小値がオーバーフローするので使うべきではない. + // 文字列については,単項演算子 '-' をサポートしない. + // 真偽値については,単項演算子 '-' の代わりに '!' が使える. +}; + +struct OrderOptions { + OrderType type; + + OrderOptions(); +}; + +struct OrderUnit { + std::unique_ptr<Expression> &&expression; + OrderType type; +}; + +class Order { + public: + Order(); + ~Order(); +}; + +class OrderBuilder { + public: + OrderBuilder(); + virtual ~OrderBuilder(); + + // 整列条件に追加する. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 整列条件は末尾に追加していくため,優先度の高い整列条件から順に + // 追加しなければならない.行 ID を最後の整列条件として追加することにより, + // 整列結果を安定させることができる. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - 指定された式の評価結果の型が整列条件として使えない. + // - 指定されたオプションが不正である. + // - リソースを確保できない. + virtual bool push(Error *error, + std::unique_ptr<Expression> &&expression, + const OrderOptions &options) = 0; + + // 保持している整列条件を破棄する. + virtual void clear() = 0; + + // 構築中の順序を完成させ,その所有権を取得する. + // 成功すれば有効なオブジェクトへのポインタを返す. + // 失敗したときは *error にその内容を格納し, nullptr を返す. + // + // 所有権を返すため,保持している整列条件は破棄する. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - リソースを確保できない. + virtual std::unique_ptr<Order> release(Error *error) = 0; +}; + +} // namespace grnxx + +#endif // GRNXX_ORDER_HPP -------------- next part -------------- HTML����������������������������... Télécharger