14 #ifndef OR_TOOLS_SAT_THETA_TREE_H_
15 #define OR_TOOLS_SAT_THETA_TREE_H_
93 template <
typename IntegerType>
102 template <
typename IntegerType>
112 void Reset(
int num_events);
128 IntegerType energy_min, IntegerType energy_max);
133 IntegerType energy_min, IntegerType energy_max);
141 IntegerType energy_max);
146 IntegerType initial_envelope_opt,
147 IntegerType energy_max);
193 IntegerType target_envelope,
int* critical_event,
int* optional_event,
194 IntegerType* available_energy)
const;
198 return tree_[GetLeafFromEvent(event)].sum_of_energy_min;
203 IntegerType envelope;
204 IntegerType envelope_opt;
205 IntegerType sum_of_energy_min;
206 IntegerType max_of_energy_delta;
209 TreeNode ComposeTreeNodes(TreeNode left, TreeNode right);
211 int GetLeafFromEvent(
int event)
const;
212 int GetEventFromLeaf(
int leaf)
const;
215 void RefreshNode(
int node);
221 int GetMaxLeafWithEnvelopeGreaterThan(
int node, IntegerType target_envelope,
222 IntegerType* extra)
const;
225 int GetLeafWithMaxEnergyDelta(
int node)
const;
229 void GetLeavesWithOptionalEnvelopeGreaterThan(
230 IntegerType target_envelope,
int* critical_leaf,
int* optional_leaf,
231 IntegerType* available_energy)
const;
240 bool leaf_nodes_have_delayed_operations_ =
false;
243 std::vector<TreeNode> tree_;
247 extern template class ThetaLambdaTree<IntegerValue>;
248 extern template class ThetaLambdaTree<int64>;
253 #endif // OR_TOOLS_SAT_THETA_TREE_H_