39 namespace Gecode {
namespace Int {
namespace Cumulative {
55 template<
class TaskView>
59 for (
int i=
tasks.size();
i--; ) {
65 template<
class TaskView>
70 static_cast<long long int>(
c)*
tasks[i].est()+
tasks[
i].e();
74 template<
class TaskView>
81 template<
class TaskView>
103 template<
class TaskView>
void 106 for (
int i=
tasks.size();
i--; ) {
113 template<
class TaskView>
template<
class Node>
118 template<
class TaskView>
124 static_cast<long long int>(
c)*
tasks[i].est()+
tasks[
i].e();
135 static_cast<long long int>(
c-
ci) *
tasks[i].lct()) {
150 long long int a_e =
node[met].e;
151 long long int a_env =
node[met].env;
152 long long int b_e = 0;
164 return plus(a_env,b_e);
177 resLe = undef; resLenv = undef;
183 if (l.
le + r.
e > l.
e + r.
le) {
203 template<
class TaskView>
208 for (
int i=
tasks.size();
i--; ) {
219 template<
class TaskView>
233 template<
class TaskView>
246 template<
class TaskView>
249 return root().resLenv < 0;
252 template<
class TaskView>
255 return root().resLenv;
258 template<
class TaskView>
264 template<
class TaskView>
long long int cenv
Energy envelope for subtree.
long long int env(int i)
Compute update for task with index i.
static int n_right(int i)
Return index of right child of node i.
static int n_left(int i)
Return index of left child of node i.
long long int env(void) const
Return energy envelope of all tasks.
const FloatNum max
Largest allowed float value.
bool lempty(void) const
Whether has responsible task.
void shift(int i)
Shift task with index i from omega to lambda.
Node for an omega lambda tree.
long long int env
Energy envelope for subtree.
ExtOmegaNode * node
Task nodes.
Gecode::FloatVal c(-8, 8)
void init(const OmegaNode &l, const OmegaNode &r)
Initialize node from left child l and right child r.
Gecode::IntArgs i(4, 1, 2, 3, 4)
static int n_parent(int i)
Return index of parent of node i.
OmegaTree(Region &r, int c, const TaskViewArray< TaskView > &t)
Initialize tree for tasks t and capacity c.
void update(const OmegaNode &l, const OmegaNode &r)
Update node from left child l and right child r.
void update(void)
Update all inner nodes of tree after leaves have been initialized.
int resLe
Node which is responsible for le.
void init(void)
Initialize tree after leaves have been initialized.
int resLenv
Node which is responsible for lenv.
int plus(int x, int y)
Safe addition in case x is -IntLimits::infinity.
ExtOmegaTree(Region &r, int c, const TaskTree< TaskView, Node > &t)
Initialize tree for tasks t and capacity c.
bool n_leaf(int i) const
Whether node i is leaf.
Post propagator for SetVar SetOpType SetVar SetRelType r
int responsible(void) const
Return responsible task.
long long int le
Energy for subtree.
void init(const ExtOmegaNode &l, const ExtOmegaNode &r)
Initialize node from left child l and right child r.
long long int lenv(void) const
Return energy envelope of all tasks excluding lambda tasks.
const OmegaNode & root(void) const
Return root node.
void insert(int i)
Insert task with index i.
static bool left(int i)
Test whether node i is a left child.
static const int undef
Undefined task.
Node for an extended omega tree.
OmegaNode & leaf(int i)
Return leaf for task i.
static bool n_root(int i)
Whether node i is index of root.
OmegaLambdaTree(Region &r, int c, const TaskViewArray< TaskView > &t)
Initialize tree for tasks t and capcity c with all tasks included in omega.
void remove(int i)
Remove task with index i.
Gecode toplevel namespace
const TaskViewArray< TaskView > & tasks
The tasks from which the tree is computed.
const long long int llinfinity
Infinity for long long integers.
void update(const ExtOmegaNode &l, const ExtOmegaNode &r)
Update node from left child l and right child r.
Task trees for task views with node type Node.
long long int e
Energy for subtree.
long long int env(void) const
Return energy envelope of all tasks.
long long int lenv
Energy envelope for subtree.
void init(const OmegaLambdaNode &l, const OmegaLambdaNode &r)
Initialize node from left child l and right child r.
void update(const OmegaLambdaNode &l, const OmegaLambdaNode &r)
Update node from left child l and right child r.
void lremove(int i)
Remove task with index i from lambda.