MCPcopy Create free account
hub / github.com/Gecode/gecode / createBoolSym

Function createBoolSym

gecode/int/ldsb.cpp:197–251  ·  view source on GitHub ↗

Create a boolean symmetry implementation from a symmetry handle

Source from the content-addressed store, hash-verified

195
196 /// Create a boolean symmetry implementation from a symmetry handle
197 SymmetryImp<BoolView>* createBoolSym(Space& home, const SymmetryHandle& s,
198 VariableMap variableMap) {
199 VariableSymmetryObject* varref =
200 dynamic_cast<VariableSymmetryObject*>(s.ref);
201 ValueSymmetryObject* valref =
202 dynamic_cast<ValueSymmetryObject*>(s.ref);
203 VariableSequenceSymmetryObject* varseqref =
204 dynamic_cast<VariableSequenceSymmetryObject*>(s.ref);
205 ValueSequenceSymmetryObject* valseqref =
206 dynamic_cast<ValueSequenceSymmetryObject*>(s.ref);
207 if (varref) {
208 int n = varref->nxs;
209 int* indices = home.alloc<int>(n);
210 for (int i = 0 ; i < n ; i++) {
211 VariableMap::const_iterator index = variableMap.find(varref->xs[i]);
212 if (index == variableMap.end())
213 throw LDSBUnbranchedVariable("VariableSymmetryObject::createBool");
214 indices[i] = index->second;
215 }
216 return new (home) VariableSymmetryImp<BoolView>(home, indices, n);
217 }
218 if (valref) {
219 int n = valref->values.size();
220 int *vs = home.alloc<int>(n);
221 int i = 0;
222 for (IntSetValues v(valref->values) ; v() ; ++v) {
223 vs[i] = v.val();
224 i++;
225 }
226 return new (home) ValueSymmetryImp<BoolView>(home, vs, n);
227 }
228 if (varseqref) {
229 int n = varseqref->nxs;
230 int* indices = home.alloc<int>(n);
231 for (int i = 0 ; i < n ; i++) {
232 VariableMap::const_iterator index =
233 variableMap.find(varseqref->xs[i]);
234 if (index == variableMap.end())
235 throw LDSBUnbranchedVariable("VariableSequenceSymmetryObject::createBool");
236 indices[i] = index->second;
237 }
238 return new (home) VariableSequenceSymmetryImp<BoolView>(home, indices,
239 n, varseqref->seq_size);
240 }
241 if (valseqref) {
242 unsigned int n = valseqref->values.size();
243 int *vs = home.alloc<int>(n);
244 for (unsigned int i = 0 ; i < n ; i++)
245 vs[i] = valseqref->values[i];
246 return new (home) ValueSequenceSymmetryImp<BoolView>(home, vs, n,
247 valseqref->seq_size);
248 }
249 GECODE_NEVER;
250 return nullptr;
251 }
252}}}
253
254namespace Gecode {

Callers 1

branchFunction · 0.85

Calls 4

findMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
valMethod · 0.45

Tested by

no test coverage detected