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

Function createIntSym

gecode/int/ldsb.cpp:139–194  ·  view source on GitHub ↗

Create an integer symmetry implementation from a symmetry handle

Source from the content-addressed store, hash-verified

137
138 /// Create an integer symmetry implementation from a symmetry handle
139 SymmetryImp<IntView>*
140 createIntSym(Space& home, const SymmetryHandle& s,
141 VariableMap variableMap) {
142 VariableSymmetryObject* varref =
143 dynamic_cast<VariableSymmetryObject*>(s.ref);
144 ValueSymmetryObject* valref =
145 dynamic_cast<ValueSymmetryObject*>(s.ref);
146 VariableSequenceSymmetryObject* varseqref =
147 dynamic_cast<VariableSequenceSymmetryObject*>(s.ref);
148 ValueSequenceSymmetryObject* valseqref =
149 dynamic_cast<ValueSequenceSymmetryObject*>(s.ref);
150 if (varref) {
151 int n = varref->nxs;
152 int* indices = home.alloc<int>(n);
153 for (int i = 0 ; i < n ; i++) {
154 VariableMap::const_iterator index = variableMap.find(varref->xs[i]);
155 if (index == variableMap.end())
156 throw LDSBUnbranchedVariable("VariableSymmetryObject::createInt");
157 indices[i] = index->second;
158 }
159 return new (home) VariableSymmetryImp<IntView>(home, indices, n);
160 }
161 if (valref) {
162 int n = valref->values.size();
163 int *vs = home.alloc<int>(n);
164 int i = 0;
165 for (IntSetValues v(valref->values) ; v() ; ++v) {
166 vs[i] = v.val();
167 i++;
168 }
169 return new (home) ValueSymmetryImp<IntView>(home, vs, n);
170 }
171 if (varseqref) {
172 int n = varseqref->nxs;
173 int* indices = home.alloc<int>(n);
174 for (int i = 0 ; i < n ; i++) {
175 VariableMap::const_iterator index =
176 variableMap.find(varseqref->xs[i]);
177 if (index == variableMap.end())
178 throw LDSBUnbranchedVariable("VariableSequenceSymmetryObject::createInt");
179 indices[i] = index->second;
180 }
181 return new (home) VariableSequenceSymmetryImp<IntView>(home, indices, n,
182 varseqref->seq_size);
183 }
184 if (valseqref) {
185 unsigned int n = valseqref->values.size();
186 int *vs = home.alloc<int>(n);
187 for (unsigned int i = 0 ; i < n ; i++)
188 vs[i] = valseqref->values[i];
189 return new (home) ValueSequenceSymmetryImp<IntView>(home, vs, n,
190 valseqref->seq_size);
191 }
192 GECODE_NEVER;
193 return nullptr;
194 }
195
196 /// Create a boolean symmetry implementation from a symmetry handle

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