Navigation Menu

Skip to content

Commit

Permalink
Rename create_*_node() to push_*().
Browse files Browse the repository at this point in the history
  • Loading branch information
s-yata committed Jun 17, 2014
1 parent d283fc7 commit 8254a1d
Showing 1 changed file with 20 additions and 31 deletions.
51 changes: 20 additions & 31 deletions new-interface/expression-builder.hpp
Expand Up @@ -5,6 +5,7 @@

namespace grnxx {

// 後置記法(逆ポーランド記法)に基づいて式のオブジェクトを構築する.
class ExpressionBuilder {
public:
ExpressionBuilder();
Expand All @@ -15,67 +16,55 @@ class ExpressionBuilder {
// 評価結果の型を取得する.
virtual DataType data_type() const = 0;

// 定数に対応するノードを作成する
// 定数をスタックに積む
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// 作成されたノードはスタックに積まれる.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 指定された定数が不正である.
// - リソースを確保できない.
virtual bool create_datum_node(Error *error,
const Datum &datum) = 0;
virtual bool push_datum(Error *error, const Datum &datum) = 0;

// カラムに対応するノードを作成する
// カラムをスタックに積む
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// column_name に "_id" を指定すれば行 ID に対応するノード,
// "_score" を指定すればスコアに対応するノードを作成する.
//
// 作成されたノードはスタックに積まれる.
// column_name に "_id" を指定すれば行 ID に対応する擬似カラム,
// "_score" を指定すればスコアに対応する擬似カラムをスタックに積む.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 指定されたカラムが存在しない.
// - リソースを確保できない.
virtual bool create_column_node(Error *error,
const char *column_name) = 0;
virtual bool push_column(Error *error, const char *column_name) = 0;

// 演算子に対応するノードを作成する
// 演算子に対応する被演算子をスタックから降ろし,演算子をスタックに積む
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// スタックに積まれているノードを降ろして被演算子とするため,
// 被演算子を作成した後に演算子を作成しなければならない.
// これは後置式(逆ポーランド記法)の考え方にもとづく.
//
// 作成されたノードはスタックに積まれる.
// 被演算子はあらかじめスタックに積んでおく必要があり,
// 被演算子の型や数に問題があるときは失敗する.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 引数がスタックに存在しない
// - 演算子と引数が対応していない
// - 演算子が求める引数の型と実際の引数の型が異なる
// - 演算子と被演算子が対応していない
// - 被演算子がスタックに存在しない
// - 演算子が求める引数の型と被演算子の型が異なる
// - リソースを確保できない.
virtual bool create_operator_node(
Error *error,
OperatorType operator_type) = 0;
virtual bool push_operator(Error *error, OperatorType operator_type) = 0;

// 保持しているノードやスタックを破棄する.
virtual void clear();

// 構築された式を取得する
// 構築中の式を完成させ,その所有権を取得する
// 成功すれば有効なオブジェクトへのポインタを返す.
// 失敗したときは *error にその内容を格納し, nullptr を返す.
//
// 保持しているノードやスタックは破棄される.
//
// TODO: 内部で作成した Expression の所有権を返すだけにしたい.
// 所有権を返すため,保持しているノードやスタックは破棄する.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - ノードがひとつもない.
// - スタックに二つ以上のノードが存在する.
// - 式が完成していないことを示す.
// - スタックの要素数が一つでない.
// - 何も積まれていない.
// - 積まれたものが使われずに残っている.
// - 式が完成していないことを示す.
// - リソースを確保できない.
virtual std::unique_ptr<Expression> release(Error *error);
};
Expand Down

0 comments on commit 8254a1d

Please sign in to comment.