1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef txXPathOptimizer_h__
7 #define txXPathOptimizer_h__
8 
9 #include "txCore.h"
10 
11 class Expr;
12 
13 class txXPathOptimizer {
14  public:
15   /**
16    * Optimize the given expression.
17    * @param aInExpr       Expression to optimize.
18    * @param aOutExpr      Resulting expression, null if optimization didn't
19    *                      result in a new expression.
20    */
21   nsresult optimize(Expr* aInExpr, Expr** aOutExpr);
22 
23  private:
24   // Helper methods for optimizing specific classes
25   nsresult optimizeStep(Expr* aInExpr, Expr** aOutExpr);
26   nsresult optimizePath(Expr* aInExpr, Expr** aOutExpr);
27   nsresult optimizeUnion(Expr* aInExpr, Expr** aOutExpr);
28 };
29 
30 #endif
31