Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Iterators.h
Go to the documentation of this file.
1 
31 #pragma once
32 
33 #include <functional>
34 #include <utility>
35 
36 namespace ogdf {
37 namespace internal {
38 namespace gcm {
39 
40 namespace datastructure {
41 template<typename Iterator>
43 protected:
44  Iterator m_begin;
45  Iterator m_cur;
46  Iterator m_end;
47  const std::function<bool(const typename Iterator::T)> m_predicate;
48 
49 public:
50  using T = typename Iterator::T;
51 
52  FilterIterator(Iterator begin, Iterator end,
53  const std::function<bool(const typename Iterator::T)>& _predicate)
54  : m_begin(std::move(begin))
55  , m_cur(m_begin)
56  , m_end(std::move(end))
57  , m_predicate(std::move(_predicate)) {
58  if (m_cur != m_end && !m_predicate(*m_cur)) {
59  ++(*this);
60  }
61  // nothing to do
62  }
63 
65  do {
66  --m_cur;
67  } while (m_cur != m_begin && !m_predicate(*m_cur));
68  return *this;
69  }
70 
72  do {
73  ++m_cur;
74  } while (m_cur != m_end && !m_predicate(*m_cur));
75  return *this;
76  }
77 
78  bool operator==(const FilterIterator<Iterator>& b) const { return m_cur == b.m_cur; }
79 
80  bool operator!=(const FilterIterator<Iterator>& b) const { return m_cur != b.m_cur; }
81 
83  if (m_cur != m_end && !m_predicate(*m_cur)) {
84  ++(*this);
85  }
86  return *m_cur;
87  }
88 };
89 
90 template<typename Iterator>
92 private:
93  Iterator m_begin;
94  Iterator m_end;
95 
96 public:
97  IteratorRange(Iterator begin, Iterator end) : m_begin(begin), m_end(end) { }
98 
99  Iterator begin() { return m_begin; }
100 
101  Iterator end() { return m_end; }
102 };
103 
104 
105 }
106 
107 }
108 }
109 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::internal::gcm::datastructure::FilterIterator::m_end
Iterator m_end
Definition: Iterators.h:46
ogdf::begin
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)
ogdf::internal::gcm::datastructure::FilterIterator::T
typename Iterator::T T
Definition: Iterators.h:50
ogdf::internal::gcm::datastructure::IteratorRange::end
Iterator end()
Definition: Iterators.h:101
ogdf::internal::gcm::datastructure::FilterIterator::m_predicate
const std::function< bool(const typename Iterator::T)> m_predicate
Definition: Iterators.h:47
ogdf::internal::gcm::datastructure::FilterIterator::operator==
bool operator==(const FilterIterator< Iterator > &b) const
Definition: Iterators.h:78
ogdf::internal::gcm::datastructure::FilterIterator::m_begin
Iterator m_begin
Definition: Iterators.h:44
ogdf::internal::gcm::datastructure::FilterIterator::m_cur
Iterator m_cur
Definition: Iterators.h:45
backward::details::move
const T & move(const T &v)
Definition: backward.hpp:243
ogdf::internal::gcm::datastructure::IteratorRange::m_begin
Iterator m_begin
Definition: Iterators.h:93
ogdf::internal::gcm::datastructure::FilterIterator::operator!=
bool operator!=(const FilterIterator< Iterator > &b) const
Definition: Iterators.h:80
ogdf::internal::gcm::datastructure::FilterIterator::operator*
T operator*()
Definition: Iterators.h:82
ogdf::internal::gcm::datastructure::IteratorRange::begin
Iterator begin()
Definition: Iterators.h:99
ogdf::internal::gcm::datastructure::FilterIterator::operator--
FilterIterator< Iterator > & operator--()
Definition: Iterators.h:64
std
Definition: GML.h:110
ogdf::end
HypergraphRegistry< HypernodeElement >::iterator end(const HypergraphRegistry< HypernodeElement > &self)
ogdf::internal::gcm::datastructure::IteratorRange::IteratorRange
IteratorRange(Iterator begin, Iterator end)
Definition: Iterators.h:97
ogdf::internal::gcm::datastructure::FilterIterator::operator++
FilterIterator< Iterator > & operator++()
Definition: Iterators.h:71
ogdf::internal::gcm::datastructure::FilterIterator
Definition: Iterators.h:42
ogdf::internal::gcm::datastructure::FilterIterator::FilterIterator
FilterIterator(Iterator begin, Iterator end, const std::function< bool(const typename Iterator::T)> &_predicate)
Definition: Iterators.h:52
ogdf::internal::gcm::datastructure::IteratorRange::m_end
Iterator m_end
Definition: Iterators.h:94
ogdf::internal::gcm::datastructure::IteratorRange
Definition: Iterators.h:91