14#ifndef OR_TOOLS_SAT_THETA_TREE_H_
15#define OR_TOOLS_SAT_THETA_TREE_H_
94template <
typename IntegerType>
103template <
typename IntegerType>
113 void Reset(
int num_events);
129 IntegerType energy_min, IntegerType energy_max);
134 IntegerType energy_min, IntegerType energy_max);
142 IntegerType energy_max);
147 IntegerType initial_envelope_opt,
148 IntegerType energy_max);
194 IntegerType target_envelope,
int* critical_event,
int* optional_event,
195 IntegerType* available_energy)
const;
199 return tree_[GetLeafFromEvent(event)].sum_of_energy_min;
204 IntegerType envelope;
205 IntegerType envelope_opt;
206 IntegerType sum_of_energy_min;
207 IntegerType max_of_energy_delta;
210 TreeNode ComposeTreeNodes(TreeNode left, TreeNode right);
212 int GetLeafFromEvent(
int event)
const;
213 int GetEventFromLeaf(
int leaf)
const;
216 void RefreshNode(
int node);
222 int GetMaxLeafWithEnvelopeGreaterThan(
int node, IntegerType target_envelope,
223 IntegerType* extra)
const;
226 int GetLeafWithMaxEnergyDelta(
int node)
const;
230 void GetLeavesWithOptionalEnvelopeGreaterThan(
231 IntegerType target_envelope,
int* critical_leaf,
int* optional_leaf,
232 IntegerType* available_energy)
const;
241 bool leaf_nodes_have_delayed_operations_ =
false;
244 std::vector<TreeNode> tree_;
248extern template class ThetaLambdaTree<IntegerValue>;
249extern template class ThetaLambdaTree<int64_t>;
IntegerType GetEnvelopeOf(int event) const
void GetEventsWithOptionalEnvelopeGreaterThan(IntegerType target_envelope, int *critical_event, int *optional_event, IntegerType *available_energy) const
void RecomputeTreeForDelayedOperations()
IntegerType GetOptionalEnvelope() const
void RemoveEvent(int event)
int GetMaxEventWithEnvelopeGreaterThan(IntegerType target_envelope) const
void Reset(int num_events)
void AddOrUpdateOptionalEvent(int event, IntegerType initial_envelope_opt, IntegerType energy_max)
void DelayedAddOrUpdateEvent(int event, IntegerType initial_envelope, IntegerType energy_min, IntegerType energy_max)
IntegerType EnergyMin(int event) const
void DelayedAddOrUpdateOptionalEvent(int event, IntegerType initial_envelope_opt, IntegerType energy_max)
void AddOrUpdateEvent(int event, IntegerType initial_envelope, IntegerType energy_min, IntegerType energy_max)
IntegerType GetEnvelope() const
void DelayedRemoveEvent(int event)
constexpr IntegerValue kMinIntegerValue(-kMaxIntegerValue.value())
constexpr IntegerType IntegerTypeMinimumValue()
Collection of objects used to extend the Constraint Solver library.