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

Function createSetSym

gecode/set/ldsb.cpp:74–130  ·  view source on GitHub ↗

* The createSetSym function is an almost exact copy of * createIntSym/createBoolSym. */

Source from the content-addressed store, hash-verified

72 * createIntSym/createBoolSym.
73 */
74 SymmetryImp<SetView>* createSetSym(Space& home, const SymmetryHandle& s,
75 VariableMap variableMap) {
76 VariableSymmetryObject* varref =
77 dynamic_cast<VariableSymmetryObject*>(s.ref);
78 ValueSymmetryObject* valref =
79 dynamic_cast<ValueSymmetryObject*>(s.ref);
80 VariableSequenceSymmetryObject* varseqref =
81 dynamic_cast<VariableSequenceSymmetryObject*>(s.ref);
82 ValueSequenceSymmetryObject* valseqref =
83 dynamic_cast<ValueSequenceSymmetryObject*>(s.ref);
84 if (varref) {
85 int n = varref->nxs;
86 int* indices = home.alloc<int>(n);
87 for (int i = 0 ; i < n ; i++) {
88 VariableMap::const_iterator index = variableMap.find(varref->xs[i]);
89 if (index == variableMap.end())
90 throw
91 Int::LDSBUnbranchedVariable("VariableSymmetryObject::createSet");
92 indices[i] = index->second;
93 }
94 return new (home) VariableSymmetryImp<SetView>(home, indices, n);
95 }
96 if (valref) {
97 int n = valref->values.size();
98 int *vs = home.alloc<int>(n);
99 int i = 0;
100 for (IntSetValues v(valref->values) ; v() ; ++v) {
101 vs[i] = v.val();
102 i++;
103 }
104 return new (home) ValueSymmetryImp<SetView>(home, vs, n);
105 }
106 if (varseqref) {
107 int n = varseqref->nxs;
108 int* indices = home.alloc<int>(n);
109 for (int i = 0 ; i < n ; i++) {
110 VariableMap::const_iterator index =
111 variableMap.find(varseqref->xs[i]);
112 if (index == variableMap.end())
113 throw
114 Int::LDSBUnbranchedVariable("VariableSequenceSymmetryObject::createSet");
115 indices[i] = index->second;
116 }
117 return new (home) VariableSequenceSymmetryImp<SetView>(home, indices, n,
118 varseqref->seq_size);
119 }
120 if (valseqref) {
121 unsigned int n = valseqref->values.size();
122 int *vs = home.alloc<int>(n);
123 for (unsigned int i = 0 ; i < n ; i++)
124 vs[i] = valseqref->values[i];
125 return new (home) ValueSequenceSymmetryImp<SetView>(home, vs, n,
126 valseqref->seq_size);
127 }
128 GECODE_NEVER;
129 return nullptr;
130 }
131}}}

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