Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

RegisteredSet.h
Go to the documentation of this file.
1 
31 #pragma once
32 
33 #include <ogdf/basic/List.h>
35 
36 namespace ogdf {
37 
39 
52 template<class Registry, bool SupportFastSizeQuery = true>
54 public:
55  using element_type = typename Registry::key_type;
56  using list_type = typename std::conditional<SupportFastSizeQuery, List<element_type>,
58 
60  explicit RegisteredSet(const Registry& R) : m_it(&R) { }
61 
63  explicit RegisteredSet() : m_it() { }
64 
66  void init() {
67  m_it.init();
68  m_elements.clear();
69  }
70 
72  void init(const Registry& R) {
73  m_it.init(&R);
74  m_elements.clear();
75  }
76 
78 
84  void insert(element_type v) {
86  if (!itV.valid()) {
87  itV = m_elements.pushBack(v);
88  }
89  }
90 
92 
98  bool remove(element_type v) {
100  if (itV.valid()) {
101  m_elements.del(itV);
103  return true;
104  } else {
105  return false;
106  }
107  }
108 
110 
116  void clear() {
117  if (!registeredAt()) {
118  return;
119  }
120  if (size() * 10 < registeredAt()->getArraySize()) {
121  while (!m_elements.empty()) {
122  remove(m_elements.front());
123  }
124  } else {
126  m_elements.clear();
127  }
128  }
129 
131 
136  bool isMember(element_type v) const { return m_it[v].valid(); }
137 
139  bool operator()(element_type v) const { return isMember(v); }
140 
142  const list_type& elements() const { return m_elements; }
143 
145  const Registry* registeredAt() const { return m_it.registeredAt(); }
146 
148 
151  int size() const { return m_elements.size(); }
152 
153  typename list_type::const_iterator begin() const { return m_elements.begin(); }
154 
155  typename list_type::const_iterator end() const { return m_elements.end(); }
156 
158  template<bool OtherSupportsFastSizeQuery>
160  this = other;
161  }
162 
164  template<bool OtherSupportsFastSizeQuery>
166  m_elements.clear();
167  m_it.init(other.registeredAt());
168  for (element_type v : other.elements()) {
169  insert(v);
170  }
171  }
172 
173 private:
177 
180 };
181 
182 }
ogdf::RegisteredSet< ConstCombinatorialEmbedding, true >::element_type
typename ConstCombinatorialEmbedding ::key_type element_type
Definition: RegisteredSet.h:55
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::RegisteredSet::elements
const list_type & elements() const
Returns a reference to the list of elements contained in this set.
Definition: RegisteredSet.h:142
ogdf::RegisteredArray
Dynamic arrays indexed with arbitrary keys.
Definition: RegisteredArray.h:808
ogdf::RegisteredSet::begin
list_type::const_iterator begin() const
Definition: RegisteredSet.h:153
ogdf::RegisteredSet::m_elements
list_type m_elements
The list of elements contained in this set.
Definition: RegisteredSet.h:179
ogdf::ListIteratorBase::valid
bool valid() const
Returns true iff the iterator points to an element.
Definition: List.h:143
ogdf::RegisteredSet< ConstCombinatorialEmbedding, true >::list_type
typename std::conditional< SupportFastSizeQuery, List< element_type >, ListPure< element_type > >::type list_type
Definition: RegisteredSet.h:57
ogdf::RegisteredSet::size
int size() const
Returns the number of elements in this set.
Definition: RegisteredSet.h:151
ogdf::RegisteredSet::init
void init(const Registry &R)
Reinitializes the set. Associates the set with registry R.
Definition: RegisteredSet.h:72
ogdf::RegisteredSet::registeredAt
const Registry * registeredAt() const
Returns the associated registry.
Definition: RegisteredSet.h:145
ogdf::RegisteredSet::end
list_type::const_iterator end() const
Definition: RegisteredSet.h:155
ogdf::RegisteredSet::m_it
RegisteredArray< Registry, ListIterator< element_type >, false > m_it
m_it[v] contains the list iterator pointing to v if v is contained in this set, or an invalid list it...
Definition: RegisteredSet.h:176
ogdf::RegisteredSet::init
void init()
Reinitializes the set. Associates the set with no registry.
Definition: RegisteredSet.h:66
backward::Color::type
type
Definition: backward.hpp:1716
ogdf::RegisteredSet::insert
void insert(element_type v)
Inserts element v into this set.
Definition: RegisteredSet.h:84
RegisteredArray.h
Declaration and implementation of RegisteredArray class.
ogdf::RegisteredSet::remove
bool remove(element_type v)
Removes element v from this set and return true iff v was previously present.
Definition: RegisteredSet.h:98
ogdf::RegisteredSet::isMember
bool isMember(element_type v) const
Returns true iff element v is contained in this set.
Definition: RegisteredSet.h:136
ogdf::RegisteredSet::clear
void clear()
Removes all elements from this set.
Definition: RegisteredSet.h:116
ogdf::RegisteredSet
Constant-time set operations.
Definition: RegisteredSet.h:53
ogdf::RegisteredSet::RegisteredSet
RegisteredSet()
Creates an empty set associated with no registry.
Definition: RegisteredSet.h:63
ogdf::ListPure
Doubly linked lists.
Definition: List.h:44
ogdf::RegisteredSet::operator()
bool operator()(element_type v) const
Returns the same as isMember() to use an RegisteredSet instance as filter function.
Definition: RegisteredSet.h:139
ogdf::RegisteredSet::RegisteredSet
RegisteredSet(const RegisteredSet< Registry, OtherSupportsFastSizeQuery > &other)
Copy constructor.
Definition: RegisteredSet.h:159
ogdf::RegisteredSet::operator=
RegisteredSet & operator=(const RegisteredSet< Registry, OtherSupportsFastSizeQuery > &other)
Assignment operator.
Definition: RegisteredSet.h:165
List.h
Declaration of doubly linked lists and iterators.
ogdf::ListIteratorBase
Encapsulates a pointer to a list element.
Definition: List.h:46
ogdf::RegisteredSet::RegisteredSet
RegisteredSet(const Registry &R)
Creates an empty set associated with registry R.
Definition: RegisteredSet.h:60