susumu.yata
null+****@clear*****
Thu Jun 12 11:55:42 JST 2014
susumu.yata 2014-06-12 11:55:42 +0900 (Thu, 12 Jun 2014) New Revision: 859856a4b073496dda3bc6b1a78648d72132ad37 https://github.com/groonga/grnxx/commit/859856a4b073496dda3bc6b1a78648d72132ad37 Message: Build an expression based on the postfix notation. Modified files: new-interface/expression-builder.hpp Modified: new-interface/expression-builder.hpp (+23 -16) =================================================================== --- new-interface/expression-builder.hpp 2014-06-11 11:40:59 +0900 (6aad343) +++ new-interface/expression-builder.hpp 2014-06-12 11:55:42 +0900 (b689fbd) @@ -16,38 +16,45 @@ class ExpressionBuilder { virtual DataType data_type() const = 0; // 定数に対応するノードを作成する. - // 成功すれば有効なオブジェクトへのポインタを返す. - // 失敗したときは *error にその内容を格納し, nullptr を返す. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 作成されたノードはスタックに積まれる. // // 失敗する状況としては,以下のようなものが挙げられる. - // - 指定された定数が異常値である. + // - 指定された定数が不正である. // - リソースを確保できない. - virtual ExpressionNode *create_datum_node(Error *error, - const Datum &datum) = 0; + virtual bool create_datum_node(Error *error, + const Datum &datum) = 0; // カラムに対応するノードを作成する. - // 成功すれば有効なオブジェクトへのポインタを返す. - // 失敗したときは *error にその内容を格納し, nullptr を返す. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 作成されたノードはスタックに積まれる. // // 失敗する状況としては,以下のようなものが挙げられる. // - 指定されたカラムが存在しない. // - リソースを確保できない. - virtual ExpressionNode *create_column_node(Error *error, - const char *column_name) = 0; + virtual bool create_column_node(Error *error, + const char *column_name) = 0; // 演算子に対応するノードを作成する. - // 成功すれば有効なオブジェクトへのポインタを返す. - // 失敗したときは *error にその内容を格納し, nullptr を返す. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // スタックに積まれているノードを降ろして被演算子とするため, + // 被演算子を作成した後に演算子を作成しなければならない. + // これは後置式(逆ポーランド記法)の考え方にもとづく. // // 失敗する状況としては,以下のようなものが挙げられる. + // - 引数がスタックに存在しない. // - 演算子と引数が対応していない. - // - 演算子が求める引数の型・数と実際の引数の型・数が異なる. + // - 演算子が求める引数の型と実際の引数の型が異なる. // - リソースを確保できない. - virtual ExpressionNode *create_operator_node( + virtual bool create_operator_node( Error *error, - OperatorType operator_type, - int64_t num_args, - ExpressionNode * const *args) = 0; + OperatorType operator_type) = 0; // すべてのノードを破棄する. virtual void clear(); -------------- next part -------------- HTML����������������������������...다운로드