Google OR-Tools: ortools/constraint_solver/routing_breaks.h Source File

27 public:

29

30

31

32

34

35

40

41

45

46

49 absl::Span<const std::pair<int64_t, int64_t>> interbreaks);

50

51 private:

54

55 static bool IncreaseMin(int64_t new_min, Interval* interval,

57 if (interval->min >= new_min) return true;

60 return false;

61 }

62 *propagation_result = kChanged;

63 return true;

64 }

65 static bool DecreaseMax(int64_t new_max, Interval* interval,

67 if (interval->max <= new_max) return true;

68 if (!interval->DecreaseMax(new_max)) {

70 return false;

71 }

72 *propagation_result = kChanged;

73 return true;

74 }

75 static bool IntersectWith(Interval source, Interval* target,

77 if (!source.IntersectWith(*target)) {

79 } else if (source != *target) {

80 *propagation_result = kChanged;

81 }

82 *target = source;

83 return *propagation_result != kInfeasible;

84 }

85

86

87

88

89

90 struct DelayedPropagation {

91 int64_t value;

92 int index;

93 bool is_min;

94 };

95 std::vector<DelayedPropagation> delayed_propagations_;

96

97 struct UsageEvent {

98 int64_t time;

99 int index;

100 bool is_start;

101 bool operator<(const UsageEvent& other) const { return time < other.time; }

102 };

103 std::vector<UsageEvent> usage_events_;

104

105 CommittableArray<int64_t> break_duration_on_transition_;

106};