1 /*
2
3 This file is part of the Maude 2 interpreter.
4
5 Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
20
21 */
22
23 //
24 // Class for rule application strategy.
25 //
26 #ifndef _applicationStrategy_hh_
27 #define _applicationStrategy_hh_
28 #include "strategyExpression.hh"
29 #include "cachedDag.hh"
30
31 class ApplicationStrategy : public StrategyExpression
32 {
33 public:
34 //
35 // label == NONE means try all rules, labeled or not.
36 //
37 ApplicationStrategy(int label,
38 const Vector<Term*>& variables,
39 const Vector<Term*>& values,
40 const Vector<StrategyExpression*>& strategies);
41 ~ApplicationStrategy();
42
43 void setTop();
44 bool getTop() const;
45 int getLabel() const;
46 const Vector<Term*>& getVariables() const;
47 Vector<CachedDag>& getValues();
48 const Vector<StrategyExpression*>& getStrategies() const;
49
50 StrategicExecution::Survival decompose(StrategicSearch& searchObject, DecompositionProcess* remainder);
51
52 private:
53 bool top; // restrict rewrites to top of term
54 const int label;
55 Vector<Term*> variables; // substitution
56 Vector<CachedDag> valueDags;
57 Vector<StrategyExpression*> strategies; // strategies for searches in conditions
58 };
59
60 inline void
setTop()61 ApplicationStrategy::setTop()
62 {
63 top = true;
64 }
65
66 inline bool
getTop() const67 ApplicationStrategy::getTop() const
68 {
69 return top;
70 }
71
72 inline int
getLabel() const73 ApplicationStrategy::getLabel() const
74 {
75 return label;
76 }
77
78 inline const Vector<Term*>&
getVariables() const79 ApplicationStrategy::getVariables() const
80 {
81 return variables;
82 }
83
84 inline Vector<CachedDag>&
getValues()85 ApplicationStrategy::getValues()
86 {
87 return valueDags;
88 }
89
90 inline const Vector<StrategyExpression*>&
getStrategies() const91 ApplicationStrategy::getStrategies() const
92 {
93 return strategies;
94 }
95
96 #endif
97