1 #ifndef OVERLAPPING_JOBS_GENERATOR_HPP
2 #define OVERLAPPING_JOBS_GENERATOR_HPP
4 #include "../instance/instance.hpp"
5 #include "../instance/job.hpp"
6 #include "../contrib/intervaltree/src/intervaltree.hpp"
7 #include "../instance/laggraph.hpp"
11 class OverlappingJobsGenerator {
15 friend class const_iterator;
18 class ITreeNodeTraits :
public ygg::ITreeNodeTraits<Node> {
20 using key_type =
unsigned int;
22 get_lower(
const Node & n)
27 get_upper(
const Node & n)
34 :
public ygg::ITreeNodeBase<ITreeNode, class ITreeNodeTraits<ITreeNode>> {
36 ITreeNode(
const Job & job) noexcept;
37 unsigned int get_lower() const noexcept;
38 unsigned int get_upper() const noexcept;
39 unsigned int get_jid() const noexcept;
48 std::vector<ITreeNode> nodes;
49 std::vector<ITreeNode> dfs;
50 std::vector<
size_t> dfs_index;
51 ygg::IntervalTree<ITreeNode, ITreeNodeTraits<ITreeNode>> itree;
53 class OverlappingPair {
59 class const_iterator {
61 typedef OverlappingPair value_type;
62 typedef const OverlappingPair & const_reference;
63 typedef const OverlappingPair * const_pointer;
64 typedef std::input_iterator_tag
67 const_iterator(
const OverlappingJobsGenerator & gen);
68 const_iterator(
const OverlappingJobsGenerator & gen,
bool);
75 bool operator==(
const const_iterator & other)
const noexcept;
76 bool operator!=(
const const_iterator & other)
const noexcept;
78 const_iterator & operator++() noexcept;
79 const_iterator operator++(
int) noexcept;
81 const_reference operator*() const;
82 const_pointer operator->() const;
85 void advance_a() noexcept;
86 void advance_b() noexcept;
87 void skip_b_forward() noexcept;
88 void push_a_forward() noexcept;
90 OverlappingPair element;
92 const OverlappingJobsGenerator & gen;
94 ygg::IntervalTree<ITreeNode, ITreeNodeTraits<ITreeNode>>::template QueryResult<ITreeNode> b_qr;
95 decltype(b_qr.begin()) b_iterator;
96 std::vector<std::vector<
unsigned int>> predecessors;
101 OverlappingJobsGenerator(const
Instance & instance);
103 const_iterator begin() const;
104 const_iterator end() const;