diff options
Diffstat (limited to '')
-rw-r--r-- | src/rule.cpp | 168 |
1 files changed, 84 insertions, 84 deletions
diff --git a/src/rule.cpp b/src/rule.cpp index 81e775e..15b2388 100644 --- a/src/rule.cpp +++ b/src/rule.cpp | |||
@@ -12,8 +12,8 @@ | |||
12 | using namespace Bu; | 12 | using namespace Bu; |
13 | 13 | ||
14 | Rule::Rule( const Bu::String &sName ) : | 14 | Rule::Rule( const Bu::String &sName ) : |
15 | sName( sName ), | 15 | sName( sName ), |
16 | pInput( NULL ) | 16 | pInput( NULL ) |
17 | { | 17 | { |
18 | } | 18 | } |
19 | 19 | ||
@@ -23,146 +23,146 @@ Rule::~Rule() | |||
23 | 23 | ||
24 | const Bu::String &Rule::getName() const | 24 | const Bu::String &Rule::getName() const |
25 | { | 25 | { |
26 | return sName; | 26 | return sName; |
27 | } | 27 | } |
28 | 28 | ||
29 | void Rule::setInput( const AstBranch *pNewInput ) | 29 | void Rule::setInput( const AstBranch *pNewInput ) |
30 | { | 30 | { |
31 | pInput = pNewInput; | 31 | pInput = pNewInput; |
32 | } | 32 | } |
33 | 33 | ||
34 | const AstBranch *Rule::getInput() const | 34 | const AstBranch *Rule::getInput() const |
35 | { | 35 | { |
36 | return pInput; | 36 | return pInput; |
37 | } | 37 | } |
38 | 38 | ||
39 | bool Rule::hasOutputs() const | 39 | bool Rule::hasOutputs() const |
40 | { | 40 | { |
41 | return !lOutput.isEmpty(); | 41 | return !lOutput.isEmpty(); |
42 | } | 42 | } |
43 | 43 | ||
44 | void Rule::addOutput( const AstBranch *pNewOutput ) | 44 | void Rule::addOutput( const AstBranch *pNewOutput ) |
45 | { | 45 | { |
46 | lOutput.append( pNewOutput ); | 46 | lOutput.append( pNewOutput ); |
47 | } | 47 | } |
48 | 48 | ||
49 | void Rule::addProfile( const AstBranch *pProfRoot ) | 49 | void Rule::addProfile( const AstBranch *pProfRoot ) |
50 | { | 50 | { |
51 | Profile *pProf = new Profile( pProfRoot ); | 51 | Profile *pProf = new Profile( pProfRoot ); |
52 | hProfiles.insert( pProf->getName(), pProf ); | 52 | hProfiles.insert( pProf->getName(), pProf ); |
53 | /* | 53 | /* |
54 | hProfiles.insert( | 54 | hProfiles.insert( |
55 | dynamic_cast<const AstLeaf *>( | 55 | dynamic_cast<const AstLeaf *>( |
56 | (*pProfile->getBranchBegin()).first() | 56 | (*pProfile->getBranchBegin()).first() |
57 | )->getStrValue(), | 57 | )->getStrValue(), |
58 | pProfile | 58 | pProfile |
59 | ); | 59 | ); |
60 | */ | 60 | */ |
61 | } | 61 | } |
62 | 62 | ||
63 | void Rule::prepTarget( class Target *pTarget ) | 63 | void Rule::prepTarget( class Target *pTarget ) |
64 | { | 64 | { |
65 | pTarget->setDisplay( getDisplay() ); | 65 | pTarget->setDisplay( getDisplay() ); |
66 | for( ProfileHash::iterator i = hProfiles.begin(); i; i++ ) | 66 | for( ProfileHash::iterator i = hProfiles.begin(); i; i++ ) |
67 | { | 67 | { |
68 | pTarget->addProfile( *i ); | 68 | pTarget->addProfile( *i ); |
69 | } | 69 | } |
70 | for( AstBranchList::iterator i = lRequires.begin(); i; i++ ) | 70 | for( AstBranchList::iterator i = lRequires.begin(); i; i++ ) |
71 | { | 71 | { |
72 | pTarget->addRequires( *i ); | 72 | pTarget->addRequires( *i ); |
73 | } | 73 | } |
74 | } | 74 | } |
75 | 75 | ||
76 | Target *Rule::createTarget( class Runner &r, const Bu::String &sInput, | 76 | Target *Rule::createTarget( class Runner &r, const Bu::String &sInput, |
77 | Target *pParent ) | 77 | Target *pParent ) |
78 | { | 78 | { |
79 | r.getContext().pushScope( pParent->getVars() ); | 79 | r.getContext().pushScope( pParent->getVars() ); |
80 | r.getContext().addVariable("INPUT", sInput ); | 80 | r.getContext().addVariable("INPUT", sInput ); |
81 | Target *pTrg = new Target( false ); | 81 | Target *pTrg = new Target( false ); |
82 | for( AstBranchList::iterator i = lOutput.begin(); i; i++ ) | 82 | for( AstBranchList::iterator i = lOutput.begin(); i; i++ ) |
83 | { | 83 | { |
84 | Variable vOut = r.execExpr( | 84 | Variable vOut = r.execExpr( |
85 | (*(*i)->getBranchBegin()).begin(), | 85 | (*(*i)->getBranchBegin()).begin(), |
86 | Variable( sInput ) | 86 | Variable( sInput ) |
87 | ); | 87 | ); |
88 | if( vOut.getType() == Variable::typeString ) | 88 | if( vOut.getType() == Variable::typeString ) |
89 | { | 89 | { |
90 | pTrg->addOutput( vOut.getString() ); | 90 | pTrg->addOutput( vOut.getString() ); |
91 | } | 91 | } |
92 | else if( vOut.getType() == Variable::typeList ) | 92 | else if( vOut.getType() == Variable::typeList ) |
93 | { | 93 | { |
94 | for( VarList::iterator j = vOut.begin(); j; j++ ) | 94 | for( VarList::iterator j = vOut.begin(); j; j++ ) |
95 | { | 95 | { |
96 | pTrg->addOutput( (*j).getString() ); | 96 | pTrg->addOutput( (*j).getString() ); |
97 | } | 97 | } |
98 | } | 98 | } |
99 | } | 99 | } |
100 | r.getContext().addVariable("OUTPUT", pTrg->getOutputList() ); | 100 | r.getContext().addVariable("OUTPUT", pTrg->getOutputList() ); |
101 | pTrg->addInput( sInput ); | 101 | pTrg->addInput( sInput ); |
102 | pTrg->setDisplay( getDisplay() ); | 102 | pTrg->setDisplay( getDisplay() ); |
103 | for( ProfileHash::iterator i = hProfiles.begin(); i; i++ ) | 103 | for( ProfileHash::iterator i = hProfiles.begin(); i; i++ ) |
104 | { | 104 | { |
105 | pTrg->addProfile( *i ); | 105 | pTrg->addProfile( *i ); |
106 | } | 106 | } |
107 | for( AstBranchList::iterator i = lRequires.begin(); i; i++ ) | 107 | for( AstBranchList::iterator i = lRequires.begin(); i; i++ ) |
108 | { | 108 | { |
109 | pTrg->addRequires( *i ); | 109 | pTrg->addRequires( *i ); |
110 | } | 110 | } |
111 | pTrg->setVars( r.getContext().getScope() ); | 111 | pTrg->setVars( r.getContext().getScope() ); |
112 | r.getContext().popScope(); | 112 | r.getContext().popScope(); |
113 | 113 | ||
114 | return pTrg; | 114 | return pTrg; |
115 | } | 115 | } |
116 | 116 | ||
117 | bool Rule::ruleMatches( Runner &r, const Bu::String &sInput ) | 117 | bool Rule::ruleMatches( Runner &r, const Bu::String &sInput ) |
118 | { | 118 | { |
119 | r.getContext().pushScope(); | 119 | r.getContext().pushScope(); |
120 | r.getContext().addVariable("INPUT", sInput ); | 120 | r.getContext().addVariable("INPUT", sInput ); |
121 | Variable vInput( sInput ); | 121 | Variable vInput( sInput ); |
122 | Variable vOut = r.execExpr( | 122 | Variable vOut = r.execExpr( |
123 | (*pInput->getBranchBegin()).begin(), | 123 | (*pInput->getBranchBegin()).begin(), |
124 | vInput | 124 | vInput |
125 | ); | 125 | ); |
126 | r.getContext().popScope(); | 126 | r.getContext().popScope(); |
127 | if( vOut.getType() == Variable::typeBool ) | 127 | if( vOut.getType() == Variable::typeBool ) |
128 | return vOut.getBool(); | 128 | return vOut.getBool(); |
129 | else if( vOut.getType() == Variable::typeList ) | 129 | else if( vOut.getType() == Variable::typeList ) |
130 | return vOut.begin(); | 130 | return vOut.begin(); |
131 | return false; | 131 | return false; |
132 | } | 132 | } |
133 | 133 | ||
134 | void Rule::addTag( const Bu::String &sTag ) | 134 | void Rule::addTag( const Bu::String &sTag ) |
135 | { | 135 | { |
136 | lsTags.append( sTag ); | 136 | lsTags.append( sTag ); |
137 | } | 137 | } |
138 | 138 | ||
139 | const StrList &Rule::getTagList() const | 139 | const StrList &Rule::getTagList() const |
140 | { | 140 | { |
141 | return lsTags; | 141 | return lsTags; |
142 | } | 142 | } |
143 | 143 | ||
144 | void Rule::setDisplay( const Bu::String &sStr ) | 144 | void Rule::setDisplay( const Bu::String &sStr ) |
145 | { | 145 | { |
146 | sDisplay = sStr; | 146 | sDisplay = sStr; |
147 | } | 147 | } |
148 | 148 | ||
149 | const Bu::String &Rule::getDisplay() const | 149 | const Bu::String &Rule::getDisplay() const |
150 | { | 150 | { |
151 | return (sDisplay.isSet())?(sDisplay):(sName); | 151 | return (sDisplay.isSet())?(sDisplay):(sName); |
152 | } | 152 | } |
153 | 153 | ||
154 | void Rule::addRequires( const AstBranch *pBr ) | 154 | void Rule::addRequires( const AstBranch *pBr ) |
155 | { | 155 | { |
156 | lRequires.append( pBr ); | 156 | lRequires.append( pBr ); |
157 | } | 157 | } |
158 | 158 | ||
159 | Bu::Formatter &operator<<( Bu::Formatter &f, const Rule &/*t*/ ) | 159 | Bu::Formatter &operator<<( Bu::Formatter &f, const Rule &/*t*/ ) |
160 | { | 160 | { |
161 | return f << "rule"; | 161 | return f << "rule"; |
162 | } | 162 | } |
163 | 163 | ||
164 | template<> Bu::Formatter &Bu::operator<< <Rule>( Bu::Formatter &f, const Rule *t ) | 164 | template<> Bu::Formatter &Bu::operator<< <Rule>( Bu::Formatter &f, const Rule *t ) |
165 | { | 165 | { |
166 | return f << (*t); | 166 | return f << (*t); |
167 | } | 167 | } |
168 | 168 | ||