Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Hypergraph.h
Go to the documentation of this file.
1 
34 #pragma once
35 
36 #include <ogdf/basic/GraphList.h>
37 #include <ogdf/basic/List.h>
38 #include <ogdf/basic/Observer.h>
40 
42 #define forall_adj_elements(adj, ge) for ((adj) = (v)->firstAdj(); (adj); (adj) = (adj)->succ())
43 
45 #define forall_hypernodes(v, H) for ((v) = (H).firstHypernode(); (v); (v) = (v)->succ())
46 
48 #define forall_rev_hypernodes(v, H) for ((v) = (H).lastHypernode(); (v); (v) = (v)->pred())
49 
51 #define forall_hyperedges(e, H) for ((e) = (H).firstHyperedge(); (e); (e) = (e)->succ())
52 
54 #define forall_rev_hyperedges(e, H) for ((e) = (H).lastHyperedge(); (e); (e) = (e)->pred())
55 
56 namespace ogdf {
57 
58 class OGDF_EXPORT Hypergraph;
59 class OGDF_EXPORT HypernodeElement;
60 class OGDF_EXPORT HyperedgeElement;
61 class OGDF_EXPORT AdjHypergraphElement;
62 
65 
68 
71 
73 
78  friend class Hypergraph;
79  friend class GraphListBase;
81 
82 private:
84  GraphElement* m_element;
85 
87 
94 
96  int m_index;
97 
99  explicit AdjHypergraphElement(GraphElement* pElement)
100  : m_element(pElement), m_twin(nullptr), m_index(0) { }
101 
103  AdjHypergraphElement(GraphElement* pElement, int pIndex)
104  : m_element(pElement), m_twin(nullptr), m_index(pIndex) { }
105 
106 public:
108  int index() const { return m_index; }
109 
111 
116  GraphElement* element() const { return m_element; }
117 
119  adjHypergraphEntry twin() const { return m_twin; }
120 
122  adjHypergraphEntry succ() const { return static_cast<adjHypergraphEntry>(m_next); }
123 
125  adjHypergraphEntry pred() const { return static_cast<adjHypergraphEntry>(m_prev); }
126 
128  adjHypergraphEntry cyclicSucc() const;
129 
131  adjHypergraphEntry cyclicPred() const;
132 
134 };
135 
138  friend class Hypergraph;
139  friend class GraphListBase;
141 
142 private:
145 
147  int m_index;
148 
151 
154 
156 
159  explicit HyperedgeElement(int pIndex)
160  : m_index(pIndex), m_cardinality(0), m_hypergraph(nullptr) { }
161 
162 public:
164  int index() const { return m_index; }
165 
167  int cardinality() const { return m_cardinality; }
168 
170  Hypergraph* hypergraph() const { return m_hypergraph; }
171 
173  adjHypergraphEntry firstAdj() const { return m_adjHypernodes.head(); }
174 
176  adjHypergraphEntry lastAdj() const { return m_adjHypernodes.tail(); }
177 
180 
182  template<class NODELIST>
183  void allHypernodes(NODELIST& hypernodes) const {
184  hypernodes.clear();
185  for (adjHypergraphEntry adj = firstAdj(); adj; adj = adj->succ()) {
186  hypernodes.pushBack(reinterpret_cast<hypernode>(adj->element()));
187  }
188  }
189 
191  bool incident(hypernode v) const {
192  for (adjHypergraphEntry adj = firstAdj(); adj; adj = adj->succ()) {
193  if (reinterpret_cast<hypernode>(adj->element()) == v) {
194  return true;
195  }
196  }
197  return false;
198  }
199 
201  hyperedge succ() const { return static_cast<hyperedge>(m_next); }
202 
204  hyperedge pred() const { return static_cast<hyperedge>(m_prev); }
205 
207  bool operator==(const hyperedge e) const {
208  return e->index() == m_index && e->hypergraph() == m_hypergraph;
209  }
210 
211  friend std::ostream& operator<<(std::ostream& os, ogdf::hyperedge e);
212 
214 };
215 
218  friend class Hypergraph;
219  friend class GraphListBase;
221 
222 public:
224  enum class Type {
225  normal = 0x0000001,
226  dummy = 0x0000002,
227  OR = 0x0000003,
228  BUF = 0x0000004,
229  AND = 0x0000005,
230  NOR = 0x0000006,
231  NOT = 0x0000007,
232  XOR = 0x0000008,
233  DFF = 0x0000009,
234  NAND = 0x0000010,
235  INPUT = 0x0000011,
236  OUTPUT = 0x0000012
237  };
238 
239 private:
242 
244  int m_index;
245 
247  int m_degree;
248 
251 
254 
256  explicit HypernodeElement(int pIndex)
257  : m_index(pIndex), m_degree(0), m_type(Type::normal), m_hypergraph(nullptr) { }
258 
260  HypernodeElement(int pIndex, Type pType)
261  : m_index(pIndex), m_degree(0), m_type(pType), m_hypergraph(nullptr) { }
262 
263 public:
265  int index() const { return m_index; }
266 
268  int degree() const { return m_degree; }
269 
271  Hypergraph* hypergraph() const { return m_hypergraph; }
272 
274  Type type() const { return m_type; }
275 
277  void type(Type pType) { m_type = pType; }
278 
280  adjHypergraphEntry firstAdj() const { return m_adjHyperedges.head(); }
281 
283  adjHypergraphEntry lastAdj() const { return m_adjHyperedges.tail(); }
284 
286  template<class NODELIST>
287  void allHyperedges(NODELIST& hyperedges) const {
288  hyperedges.clear();
289  for (adjHypergraphEntry adj = firstAdj(); adj; adj = adj->succ()) {
290  hyperedges.pushBack(reinterpret_cast<hyperedge>(adj->element()));
291  }
292  }
293 
295  bool adjacent(hypernode v) const {
296  for (adjHypergraphEntry adj = firstAdj(); adj; adj = adj->succ()) {
297  if (reinterpret_cast<hyperedge>(adj->element())->incident(v)) {
298  return true;
299  }
300  }
301  return false;
302  }
303 
305  hypernode succ() const { return static_cast<hypernode>(m_next); }
306 
308  hypernode pred() const { return static_cast<hypernode>(m_prev); }
309 
311  bool operator==(const hypernode v) const {
312  return v->index() == m_index && v->hypergraph() == m_hypergraph;
313  }
314 
316 };
317 
319 template<typename Key>
321  : public RegistryBase<Key*, HypergraphRegistry<Key>, internal::GraphIterator<Key*>> {
324 
325 public:
327 
329  HypergraphRegistry(Hypergraph* graph, int* nextKeyIndex)
330  : m_pGraph(graph), m_nextKeyIndex(nextKeyIndex) { }
331 
332  static inline int keyToIndex(Key* key) { return key->index(); }
333 
334  bool isKeyAssociated(Key* key) const {
335  if (key == nullptr) {
336  return false;
337  }
338 #ifdef OGDF_DEBUG
339  if (key->hypergraph() == m_pGraph) {
340  OGDF_ASSERT(keyToIndex(key) < this->getArraySize());
341  return true;
342  } else {
343  return false;
344  }
345 #else
346  return true;
347 #endif
348  }
349 
350  int calculateArraySize(int add) const { return calculateTableSize(*m_nextKeyIndex + add); }
351 
352  int maxKeyIndex() const { return (*m_nextKeyIndex) - 1; }
353 
355  Hypergraph* graphOf() const { return m_pGraph; }
356 };
357 
359  const HypergraphRegistry<HypernodeElement>& self);
360 
362  const HypergraphRegistry<HypernodeElement>& self);
363 
365  const HypergraphRegistry<HyperedgeElement>& self);
366 
368  const HypergraphRegistry<HyperedgeElement>& self);
369 
371 template<typename Key, typename Value, bool WithDefault, typename Registry = HypergraphRegistry<Key>>
372 class HypergraphRegisteredArray : public RegisteredArray<Registry, Value, WithDefault, Hypergraph> {
374 
375 public:
376  using RA::RA;
377 
380  if (RA::registeredAt() == nullptr) {
381  return nullptr;
382  } else {
383  return RA::registeredAt()->graphOf();
384  }
385  }
386 };
387 
388 #define OGDF_DECL_REG_ARRAY_TYPE(v, c) HypergraphRegisteredArray<HypernodeElement, v, c>
391 #undef OGDF_DECL_REG_ARRAY_TYPE
392 
393 #define OGDF_DECL_REG_ARRAY_TYPE(v, c) HypergraphRegisteredArray<HyperedgeElement, v, c>
396 #undef OGDF_DECL_REG_ARRAY_TYPE
397 
398 class OGDF_EXPORT HypergraphObserver;
399 
400 class OGDF_EXPORT Hypergraph : public Observable<HypergraphObserver, Hypergraph> {
403 
406 
409 
412 
415 
418 
421 
424 
425 public:
427  Hypergraph();
428 
430  Hypergraph(const Hypergraph& H);
431 
433  ~Hypergraph();
434 
436  bool empty() const { return m_nHypernodes == 0; }
437 
439  const internal::GraphList<HypernodeElement>& hypernodes() const { return m_hypernodes; }
440 
442  const internal::GraphList<HyperedgeElement>& hyperedges() const { return m_hyperedges; }
443 
445  int numberOfHypernodes() const { return m_nHypernodes; }
446 
448  int numberOfHyperedges() const { return m_nHyperedges; }
449 
451  int maxHypernodeIndex() const { return m_hypernodeIdCount - 1; }
452 
454  int maxHyperedgeIndex() const { return m_hyperedgeIdCount - 1; }
455 
457  hypernode firstHypernode() const { return m_hypernodes.head(); }
458 
460  hypernode lastHypernode() const { return m_hypernodes.tail(); }
461 
463  hyperedge firstHyperedge() const { return m_hyperedges.head(); }
464 
466  hyperedge lastHyperEdge() const { return m_hyperedges.tail(); }
467 
469  hypernode newHypernode();
470 
472  hypernode newHypernode(int pIndex);
473 
475  hypernode newHypernode(HypernodeElement::Type pType);
476 
478  hypernode newHypernode(int pIndex, HypernodeElement::Type pType);
479 
481 
485  hyperedge newHyperedge(List<hypernode>& hypernodes);
486 
488 
493  hyperedge newHyperedge(int pIndex, List<hypernode>& hypernodes);
494 
496 
499  void delHypernode(hypernode v);
500 
502 
505  void delHyperedge(hyperedge e);
506 
508  void clear();
509 
511  hypernode randomHypernode() const;
512 
514  hyperedge randomHyperedge() const;
515 
517  template<class LIST>
518  void allHypernodes(LIST& hypernodeList) const {
519  hypernodeList.clear();
520  for (hypernode v = m_hypernodes.head(); v; v = v->succ()) {
521  hypernodeList.pushBack(v);
522  }
523  }
524 
526  template<class LIST>
527  void allHyperedges(LIST& hyperedgeList) const {
528  hyperedgeList.clear();
529  for (hyperedge e = m_hyperedges.head(); e; e = e->succ()) {
530  hyperedgeList.pushBack(e);
531  }
532  }
533 
535  void readBenchHypergraph(std::istream& is);
536 
538  void readBenchHypergraph(const char* filename);
539 
541  void readPlaHypergraph(std::istream& is);
542 
544  void loadPlaHypergraph(const char* fileName);
545 
547  bool consistency() const;
548 
550  HypergraphRegistry<HypernodeElement>& hypernodeRegistry() { return m_regHypernodeArrays; }
551 
554  return m_regHypernodeArrays;
555  }
556 
557  operator const HypergraphRegistry<HypernodeElement>&() const { return m_regHypernodeArrays; }
558 
560  HypergraphRegistry<HyperedgeElement>& hyperedgeRegistry() { return m_regHyperedgeArrays; }
561 
564  return m_regHyperedgeArrays;
565  }
566 
567  operator const HypergraphRegistry<HyperedgeElement>&() const { return m_regHyperedgeArrays; }
568 
569  Hypergraph& operator=(const Hypergraph& H);
570 
571  friend std::ostream& operator<<(std::ostream& os, ogdf::Hypergraph& H);
572 
573  friend std::istream& operator>>(std::istream& is, ogdf::Hypergraph& H);
574 
576 
577 private:
578  void initArrays();
579 
580  int nextEntry(char* buffer, int from, string stop);
581 
582  HypernodeElement::Type gateType(string gate);
583 };
584 
585 }
ogdf::Hypergraph::numberOfHyperedges
int numberOfHyperedges() const
Returns the number of hyperedges in the hypergraph.
Definition: Hypergraph.h:448
ogdf::Hypergraph::maxHyperedgeIndex
int maxHyperedgeIndex() const
Returns the largest used hyperedge index.
Definition: Hypergraph.h:454
ogdf::RegistryBase
Abstract base class for registries.
Definition: RegisteredArray.h:95
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::RegisteredArray
Dynamic arrays indexed with arbitrary keys.
Definition: RegisteredArray.h:808
OGDF_DECL_REG_ARRAY
#define OGDF_DECL_REG_ARRAY(NAME)
Definition: RegisteredArray.h:960
ogdf::HypergraphRegistry::isKeyAssociated
bool isKeyAssociated(Key *key) const
Definition: Hypergraph.h:334
ogdf::AdjHypergraphElement::element
GraphElement * element() const
Returns the element associated with this adjacency entry.
Definition: Hypergraph.h:116
ogdf::internal::GraphList::tail
T * tail() const
Returns the last element in the list.
Definition: GraphList.h:322
ogdf::HypergraphRegistry::HypergraphRegistry
HypergraphRegistry(Hypergraph *graph, int *nextKeyIndex)
Constructor.
Definition: Hypergraph.h:329
ogdf::Hypergraph::allHyperedges
void allHyperedges(LIST &hyperedgeList) const
Returns a list with all hyperedges of the hypergraph.
Definition: Hypergraph.h:527
OGDF_ASSERT
#define OGDF_ASSERT(expr)
Assert condition expr. See doc/build.md for more information.
Definition: basic.h:54
ogdf::internal::GraphIteratorBase
Definition: graph_iterators.h:44
ogdf::Hypergraph::OGDF_MALLOC_NEW_DELETE
OGDF_MALLOC_NEW_DELETE
Definition: Hypergraph.h:575
ogdf::Hypergraph::allHypernodes
void allHypernodes(LIST &hypernodeList) const
Returns a list with all hypernodes of the hypergraph.
Definition: Hypergraph.h:518
ogdf::HyperedgeElement::cardinality
int cardinality() const
Returns the number of incident hypernodes.
Definition: Hypergraph.h:167
ogdf::AdjHypergraphElement::pred
adjHypergraphEntry pred() const
Returns the predecessor in the adjacency list.
Definition: Hypergraph.h:125
ogdf::RegisteredArray< HypergraphRegistry< ogdf::List< ogdf::EdgeElement > >, Value, WithDefault, Hypergraph >::RA
typename std::conditional< WithDefault, internal::RegisteredArrayWithDefault< HypergraphRegistry< ogdf::List< ogdf::EdgeElement > >, Value >, internal::RegisteredArrayWithoutDefault< HypergraphRegistry< ogdf::List< ogdf::EdgeElement > >, Value > >::type RA
Definition: RegisteredArray.h:813
ogdf::begin
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)
ogdf::internal::GraphElement
The base class for objects used by (hyper)graphs.
Definition: GraphList.h:55
ogdf::Hypergraph::m_nHyperedges
int m_nHyperedges
The number of hyperedges in the hypergraph.
Definition: Hypergraph.h:417
ogdf::HypernodeElement::HypernodeElement
HypernodeElement(int pIndex, Type pType)
Constructor.
Definition: Hypergraph.h:260
Observer.h
Simple, safe base classes for C++ observables and observers.
ogdf::HypergraphRegistry::keyToIndex
static int keyToIndex(Key *key)
Definition: Hypergraph.h:332
ogdf::HypergraphRegisteredArray
RegisteredArray for nodes and edges of a hypergraph.
Definition: Hypergraph.h:372
ogdf::HyperedgeElement::OGDF_NEW_DELETE
OGDF_NEW_DELETE
Definition: Hypergraph.h:213
ogdf::HyperedgeElement::incident
bool incident(hypernode v) const
Returns true iff v is incident to the hyperedge.
Definition: Hypergraph.h:191
ogdf::Hypergraph::m_hyperedges
internal::GraphList< HyperedgeElement > m_hyperedges
The list of all hyperedges.
Definition: Hypergraph.h:411
ogdf::AdjHypergraphElement::m_index
int m_index
The (unique) index of the adjacency entry.
Definition: Hypergraph.h:96
ogdf::HyperedgeElement::HyperedgeElement
HyperedgeElement(int pIndex)
Constructs an hyperedge element between hypernodes.
Definition: Hypergraph.h:159
ogdf::Hypergraph::hypernodeRegistry
const HypergraphRegistry< HypernodeElement > & hypernodeRegistry() const
Returns a const reference to the registry of hypernode arrays associated with this hypergraph.
Definition: Hypergraph.h:553
ogdf::AdjHypergraphElement::m_element
GraphElement * m_element
The associated hyperedge or hypernode.
Definition: Hypergraph.h:84
ogdf::HyperedgeElement
Class for the representation of hyperedges.
Definition: Hypergraph.h:137
ogdf::Hypergraph::hyperedges
const internal::GraphList< HyperedgeElement > & hyperedges() const
Returns the list of all hyperedges.
Definition: Hypergraph.h:442
ogdf::HypernodeElement::firstAdj
adjHypergraphEntry firstAdj() const
Returns the first entry in the adjaceny list.
Definition: Hypergraph.h:280
ogdf::HypernodeElement::m_degree
int m_degree
The number of incident hyperedges.
Definition: Hypergraph.h:247
ogdf::AdjHypergraphElement::succ
adjHypergraphEntry succ() const
Returns the successor in the adjacency list.
Definition: Hypergraph.h:122
ogdf::Hypergraph::hyperedgeRegistry
const HypergraphRegistry< HyperedgeElement > & hyperedgeRegistry() const
Returns a const reference to the registry of hyperedge arrays associated with this hypergraph.
Definition: Hypergraph.h:563
ogdf::HypergraphRegistry::iterator
internal::GraphIterator< Key * > iterator
Definition: Hypergraph.h:326
ogdf::HypernodeElement::pred
hypernode pred() const
Returns the predecessor in the list of all hypernodes.
Definition: Hypergraph.h:308
ogdf::HypergraphRegistry::maxKeyIndex
int maxKeyIndex() const
Definition: Hypergraph.h:352
ogdf::HyperedgeElement::incidentHypernodes
internal::GraphList< AdjHypergraphElement > incidentHypernodes() const
Returns the incident hypernodes of the hyperedge.
Definition: Hypergraph.h:179
ogdf::HypergraphRegistry
Registry for nodes and edges of a hypergraph.
Definition: Hypergraph.h:320
ogdf::Observable
Base class for an observable object that can be tracked by multiple Observer objects.
Definition: Observer.h:104
ogdf::Hypergraph::lastHyperEdge
hyperedge lastHyperEdge() const
Returns the last hyperedge in the list of all hyperedges.
Definition: Hypergraph.h:466
ogdf::HypernodeElement::type
void type(Type pType)
Sets the type of hypernode.
Definition: Hypergraph.h:277
ogdf::HyperedgeElement::index
int index() const
Returns the index of a hyperedge.
Definition: Hypergraph.h:164
ogdf::Hypergraph::maxHypernodeIndex
int maxHypernodeIndex() const
Returns the largest used hypernode index.
Definition: Hypergraph.h:451
ogdf::Hypergraph::m_nHypernodes
int m_nHypernodes
The number of hypernodes in the hypergraph.
Definition: Hypergraph.h:414
ogdf::HypernodeElement::OGDF_NEW_DELETE
OGDF_NEW_DELETE
Definition: Hypergraph.h:315
ogdf::AdjHypergraphElement
Class for adjacency list elements.
Definition: Hypergraph.h:77
ogdf::HypernodeElement::Type
Type
The type of hypernodes.
Definition: Hypergraph.h:224
ogdf::HyperedgeElement::m_cardinality
int m_cardinality
The number of incidend hypernodes.
Definition: Hypergraph.h:150
ogdf::Hypergraph::m_regHypernodeArrays
HypergraphRegistry< HypernodeElement > m_regHypernodeArrays
The registered hypernode arrays.
Definition: Hypergraph.h:402
ogdf::Hypergraph::hypernodes
const internal::GraphList< HypernodeElement > & hypernodes() const
Returns the list of all hypernodes.
Definition: Hypergraph.h:439
ogdf::HypernodeElement::m_hypergraph
Hypergraph * m_hypergraph
The hypergraph containing the hypernode (if any).
Definition: Hypergraph.h:253
GraphList.h
Decralation of GraphElement and GraphList classes.
ogdf::Hypergraph::firstHyperedge
hyperedge firstHyperedge() const
Returns the first hyperedge in the list of all hyperedges.
Definition: Hypergraph.h:463
ogdf::HyperedgeArray
HypergraphRegisteredArray< HyperedgeElement, Value, WithDefault > HyperedgeArray
Array for labeling the hyperedges in a Hypergraph with an arbitrary Value.
Definition: Hypergraph.h:395
ogdf::Hypergraph::m_hyperedgeIdCount
int m_hyperedgeIdCount
The Index that will be assigned to the next created hyperedge.
Definition: Hypergraph.h:423
ogdf::calculateTableSize
int calculateTableSize(int actualCount)
The default growth function for registered arrays.
Definition: RegisteredArray.h:58
RegisteredArray.h
Declaration and implementation of RegisteredArray class.
ogdf::HypernodeElement::hypergraph
Hypergraph * hypergraph() const
Returns the hypergraph containing the hypernode.
Definition: Hypergraph.h:271
ogdf::AdjHypergraphElement::twin
adjHypergraphEntry twin() const
Returns the pointer to a twin adjacency list.
Definition: Hypergraph.h:119
ogdf::AdjHypergraphElement::AdjHypergraphElement
AdjHypergraphElement(GraphElement *pElement, int pIndex)
Constructs an adjacency entry for a given hyper{node,edge} and index.
Definition: Hypergraph.h:103
ogdf::HypernodeElement::m_adjHyperedges
internal::GraphList< AdjHypergraphElement > m_adjHyperedges
The adjacency list of the hypernode.
Definition: Hypergraph.h:241
ogdf::Hypergraph::m_hypernodes
internal::GraphList< HypernodeElement > m_hypernodes
The list of all hypernodes.
Definition: Hypergraph.h:408
ogdf::HyperedgeElement::hypergraph
Hypergraph * hypergraph() const
Returns the hypergraph containing the hyperedge.
Definition: Hypergraph.h:170
ogdf::HyperedgeElement::pred
hyperedge pred() const
Returns the predecessor in the list of all hyperedges.
Definition: Hypergraph.h:204
ogdf::operator<<
std::ostream & operator<<(std::ostream &os, const ogdf::Array< E, INDEX > &a)
Prints array a to output stream os.
Definition: Array.h:978
ogdf::Hypergraph::empty
bool empty() const
Returns true iff the hypergraph is empty (ie. contains no hypernodes).
Definition: Hypergraph.h:436
ogdf::Hypergraph::numberOfHypernodes
int numberOfHypernodes() const
Returns the number of hypernodes in the hypergraph.
Definition: Hypergraph.h:445
ogdf::HypernodeElement::m_index
int m_index
The (unique) index of the hypernode.
Definition: Hypergraph.h:244
ogdf::HypergraphRegistry::m_pGraph
Hypergraph * m_pGraph
Definition: Hypergraph.h:322
ogdf::HypernodeElement::index
int index() const
Returns the (unique) hypernode index.
Definition: Hypergraph.h:265
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::internal::GraphList
Lists of graph objects (like nodes, edges, etc.).
Definition: GraphList.h:296
ogdf::HyperedgeElement::m_hypergraph
Hypergraph * m_hypergraph
The hypergraph containing the hyperedge (if any).
Definition: Hypergraph.h:153
ogdf::HyperedgeElement::firstAdj
adjHypergraphEntry firstAdj() const
Returns the first entry in the adjaceny list.
Definition: Hypergraph.h:173
ogdf::AdjHypergraphElement::m_twin
adjHypergraphEntry m_twin
The corresponding adjacency entry.
Definition: Hypergraph.h:93
ogdf::HypernodeElement::adjacent
bool adjacent(hypernode v) const
Returns true iff v is adjacent to the hypernode.
Definition: Hypergraph.h:295
ogdf::HyperedgeElement::succ
hyperedge succ() const
Returns the successor in the list of all hyperedges.
Definition: Hypergraph.h:201
ogdf::HypergraphRegistry::calculateArraySize
int calculateArraySize(int add) const
Definition: Hypergraph.h:350
ogdf::HypergraphRegistry::graphOf
Hypergraph * graphOf() const
Returns a pointer to the associated hypergraph.
Definition: Hypergraph.h:355
ogdf::HypernodeElement::allHyperedges
void allHyperedges(NODELIST &hyperedges) const
Returns a list with all incident hyperedges of the hypernode.
Definition: Hypergraph.h:287
ogdf::AdjHypergraphElement::index
int index() const
Returns the index of this adjacency element.
Definition: Hypergraph.h:108
ogdf::HyperedgeElement::operator==
bool operator==(const hyperedge e) const
Equality operator.
Definition: Hypergraph.h:207
ogdf::Hypergraph::firstHypernode
hypernode firstHypernode() const
Returns the first hypernode in the list of all hypernodes.
Definition: Hypergraph.h:457
ogdf::AdjHypergraphElement::OGDF_NEW_DELETE
OGDF_NEW_DELETE
Definition: Hypergraph.h:133
ogdf::Hypergraph::lastHypernode
hypernode lastHypernode() const
Returns the last hypernode in the list of all hypernodes.
Definition: Hypergraph.h:460
ogdf::HyperedgeElement::m_adjHypernodes
internal::GraphList< AdjHypergraphElement > m_adjHypernodes
The adjacency list of the hyperedge.
Definition: Hypergraph.h:144
ogdf::internal::GraphList::head
T * head() const
Returns the first element in the list.
Definition: GraphList.h:319
ogdf::Hypergraph::hyperedgeRegistry
HypergraphRegistry< HyperedgeElement > & hyperedgeRegistry()
Returns a reference to the registry of hyperedge arrays associated with this hypergraph.
Definition: Hypergraph.h:560
ogdf::HypergraphRegistry::m_nextKeyIndex
int * m_nextKeyIndex
Definition: Hypergraph.h:323
ogdf::HypernodeElement::operator==
bool operator==(const hypernode v) const
Equality operator.
Definition: Hypergraph.h:311
ogdf::HypernodeElement::degree
int degree() const
Returns the hypernode degree.
Definition: Hypergraph.h:268
ogdf::end
HypergraphRegistry< HypernodeElement >::iterator end(const HypergraphRegistry< HypernodeElement > &self)
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::HypergraphRegisteredArray::hypergraphOf
Hypergraph * hypergraphOf() const
Returns a pointer to the associated hypergraph.
Definition: Hypergraph.h:379
ogdf::HypernodeElement::succ
hypernode succ() const
Returns the successor in the list of all hypernodes.
Definition: Hypergraph.h:305
ogdf::HyperedgeElement::allHypernodes
void allHypernodes(NODELIST &hypernodes) const
Returns a list with all incident hypernodes of the hyperedge.
Definition: Hypergraph.h:183
ogdf::HypernodeElement::lastAdj
adjHypergraphEntry lastAdj() const
Returns the last entry in the adjacency list.
Definition: Hypergraph.h:283
List.h
Declaration of doubly linked lists and iterators.
ogdf::HypernodeElement::HypernodeElement
HypernodeElement(int pIndex)
Constructor.
Definition: Hypergraph.h:256
ogdf::Hypergraph::hypernodeRegistry
HypergraphRegistry< HypernodeElement > & hypernodeRegistry()
Returns a reference to the registry of hypernode arrays associated with this hypergraph.
Definition: Hypergraph.h:550
ogdf::operator>>
std::istream & operator>>(std::istream &is, TokenIgnorer token)
ogdf::HypernodeElement::type
Type type() const
Returns the type of hypernode.
Definition: Hypergraph.h:274
ogdf::HyperedgeElement::lastAdj
adjHypergraphEntry lastAdj() const
Returns the last entry in the adjacency list.
Definition: Hypergraph.h:176
ogdf::RegistryBase< Key *, HypergraphRegistry< Key >, internal::GraphIterator< Key * > >::getArraySize
int getArraySize() const
Returns the current size of all registered arrays.
Definition: RegisteredArray.h:236
ogdf::HypernodeElement::m_type
Type m_type
The type of the hypernode.
Definition: Hypergraph.h:250
ogdf::Hypergraph
Definition: Hypergraph.h:400
ogdf::AdjHypergraphElement::AdjHypergraphElement
AdjHypergraphElement(GraphElement *pElement)
Constructs an adjacency element for a given hyper{node,edge}.
Definition: Hypergraph.h:99
ogdf::HyperedgeElement::m_index
int m_index
The (unique) index of the hyperedge.
Definition: Hypergraph.h:147
ogdf::HypernodeElement
Class for the representation of hypernodes.
Definition: Hypergraph.h:217
ogdf::Hypergraph::m_regHyperedgeArrays
HypergraphRegistry< HyperedgeElement > m_regHyperedgeArrays
The registered hyperedge arrays.
Definition: Hypergraph.h:405
ogdf::HypernodeArray
HypergraphRegisteredArray< HypernodeElement, Value, WithDefault > HypernodeArray
Array for labeling the hypernodes in a Hypergraph with an arbitrary Value.
Definition: Hypergraph.h:390
ogdf::Hypergraph::m_hypernodeIdCount
int m_hypernodeIdCount
The Index that will be assigned to the next created hypernode.
Definition: Hypergraph.h:420