Navigation Menu

Skip to content

Commit

Permalink
Add ExpressionBuilder::release() instead of create_expression().
Browse files Browse the repository at this point in the history
  • Loading branch information
s-yata committed Jun 12, 2014
1 parent 859856a commit d1630e1
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions new-interface/expression-builder.hpp
Expand Up @@ -31,6 +31,9 @@ class ExpressionBuilder {
// 成功すれば true を返す.
// 失敗したときは *error にその内容を格納し, false を返す.
//
// column_name に "_id" を指定すれば行 ID に対応するノード,
// "_score" を指定すればスコアに対応するノードを作成する.
//
// 作成されたノードはスタックに積まれる.
//
// 失敗する状況としては,以下のようなものが挙げられる.
Expand All @@ -47,6 +50,8 @@ class ExpressionBuilder {
// 被演算子を作成した後に演算子を作成しなければならない.
// これは後置式(逆ポーランド記法)の考え方にもとづく.
//
// 作成されたノードはスタックに積まれる.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - 引数がスタックに存在しない.
// - 演算子と引数が対応していない.
Expand All @@ -56,18 +61,23 @@ class ExpressionBuilder {
Error *error,
OperatorType operator_type) = 0;

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

// 最後に作成したノードを根とする構文木に対応する式を作成する
// 構築された式を取得する
// 成功すれば有効なオブジェクトへのポインタを返す.
// 失敗したときは *error にその内容を格納し, nullptr を返す.
//
// 保持しているノードやスタックは破棄される.
//
// TODO: 内部で作成した Expression の所有権を返すだけにしたい.
//
// 失敗する状況としては,以下のようなものが挙げられる.
// - ノードがひとつもない.
// - スタックに二つ以上のノードが存在する.
// - 式が完成していないことを示す.
// - リソースを確保できない.
virtual std::unique_ptr<Expression> create_expression(
Error *error,
const ExpressionOptions &options) const;
virtual std::unique_ptr<Expression> release(Error *error);
};

} // namespace grnxx
Expand Down

0 comments on commit d1630e1

Please sign in to comment.