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

Method post

gecode/int/cumulative/opt-prop.hpp:55–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53
54 template<class OptTask, class Cap, class PL>
55 ExecStatus
56 OptProp<OptTask,Cap,PL>::post(Home home, Cap c, TaskArray<OptTask>& t) {
57 // Capacity must be nonnegative
58 GECODE_ME_CHECK(c.gq(home, 0));
59 // Check for overload by single task and remove excluded tasks
60 int n=t.size(), m=0;
61 for (int i=n; i--; ) {
62 if (t[i].c() > c.max())
63 GECODE_ME_CHECK(t[i].excluded(home));
64 if (t[i].excluded())
65 t[i]=t[--n];
66 else if (t[i].mandatory())
67 m++;
68 }
69 t.size(n);
70 if (t.size() < 2) {
71 if (t.size() == 1) {
72 if (t[0].mandatory()) {
73 GECODE_ME_CHECK(c.gq(home, t[0].c()));
74 return ES_OK;
75 } else if (c.min() >= t[0].c()) {
76 return ES_OK;
77 }
78 } else {
79 return ES_OK;
80 }
81 }
82 if (c.assigned() && (c.val() == 1)) {
83 TaskArray<typename TaskTraits<OptTask>::UnaryTask> mt(home,t.size());
84 for (int i=0; i<t.size(); i++)
85 mt[i]=t[i];
86 return Unary::OptProp<typename TaskTraits<OptTask>::UnaryTask,PL>
87 ::post(home,mt);
88 }
89 if (m == t.size()) {
90 TaskArray<typename TaskTraits<OptTask>::ManTask> mt(home,m);
91 for (int i=0; i<m; i++)
92 mt[i].init(t[i]);
93 return ManProp<typename TaskTraits<OptTask>::ManTask,Cap,PL>
94 ::post(home,c,mt);
95 }
96 (void) new (home) OptProp<OptTask,Cap,PL>(home,c,t);
97 return ES_OK;
98 }
99
100 template<class OptTask, class Cap, class PL>
101 Actor*

Callers

nothing calls this directly

Calls 11

postFunction · 0.50
gqMethod · 0.45
sizeMethod · 0.45
cMethod · 0.45
maxMethod · 0.45
excludedMethod · 0.45
mandatoryMethod · 0.45
minMethod · 0.45
assignedMethod · 0.45
valMethod · 0.45
initMethod · 0.45

Tested by

no test coverage detected