Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

OGDFVector.h
Go to the documentation of this file.
1 
31 #pragma once
32 
33 #include <vector>
34 
35 namespace ogdf {
36 namespace internal {
37 namespace gcm {
38 
39 namespace datastructure {
40 
41 template<typename T, typename Graph>
42 class NodeVector : public std::vector<T> {
43 private:
44  using Node = typename Graph::Node;
45  using reference = typename std::vector<T>::reference;
46  using const_reference = typename std::vector<T>::const_reference;
47 
48  const Graph* g;
50 
51 
52 public:
53  NodeVector() : g(nullptr) { }
54 
55  NodeVector(const Graph& _g) : std::vector<T>(_g.max_node_index() + 1), g(&_g) { }
56 
57  NodeVector(const Graph& _g, T& v)
58  : std::vector<T>(_g.max_node_index() + 1, v), g(&_g), default_value(v) { }
59 
60  NodeVector(const Graph& _g, T v)
61  : std::vector<T>(_g.max_node_index() + 1, v), g(&_g), default_value(v) { }
62 
64  : std::vector<T>(x), g(x.g), default_value(x.default_value) { }
65 
66  inline void adapt() {
67  if ((std::size_t)g->max_node_index() >= std::vector<T>::size()) {
68  std::vector<T>::resize(g->max_node_index() + 1, default_value);
69  }
70  }
71 
73  adapt();
74  return std::vector<T>::operator[](v->index());
75  }
76 
77  const_reference operator[](const Node& v) const {
78  OGDF_ASSERT((std::size_t)v->index() < this->size());
79  return std::vector<T>::operator[](v->index());
80  }
81 
83  std::vector<T>::operator=(x);
85  return *this;
86  }
87 
89  std::vector<T>::operator=(std::move(x));
90  default_value = x.default_value;
91  return *this;
92  }
93 };
94 
95 template<typename T, typename Graph>
96 class EdgeVector : public std::vector<T> {
97 private:
98  using Edge = typename Graph::Edge;
99  using reference = typename std::vector<T>::reference;
100  using const_reference = typename std::vector<T>::const_reference;
101  const Graph* g;
103 
104 public:
105  EdgeVector() : g(nullptr) { }
106 
107  EdgeVector(const Graph& _g) : std::vector<T>(_g.max_edge_index() + 1), g(&_g) { }
108 
109  EdgeVector(const Graph& _g, T& v)
110  : std::vector<T>(_g.max_edge_index() + 1, v), g(&_g), default_value(v) { }
111 
112  EdgeVector(const Graph& _g, T v)
113  : std::vector<T>(_g.max_edge_index() + 1, v), g(&_g), default_value(v) { }
114 
115  EdgeVector(const EdgeVector& x) : std::vector<T>(x), g(&x.g), default_value(x.default_value) { }
116 
118  : std::vector<T>(x), g(std::move(x.g)), default_value(x.default_value) { }
119 
120  inline void adapt() {
121  if (g && (std::size_t)g->max_edge_index() >= std::vector<T>::size()) {
122  std::vector<T>::resize(g->max_edge_index() + 1, default_value);
123  }
124  }
125 
127  adapt();
128  return std::vector<T>::operator[](e->index());
129  }
130 
131  const_reference operator[](const Edge& e) const {
132  OGDF_ASSERT((std::size_t)e->index() < this->size());
133  return std::vector<T>::operator[](e->index());
134  }
135 
137  std::vector<T>::operator=(x);
139  return *this;
140  }
141 
143  std::vector<T>::operator=(std::move(x));
144  default_value = x.default_value;
145  return *this;
146  }
147 };
148 
149 }
150 
151 }
152 }
153 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::internal::gcm::datastructure::NodeVector::operator=
NodeVector< T, Graph > & operator=(const NodeVector< T, Graph > &x)
Definition: OGDFVector.h:82
ogdf::internal::gcm::datastructure::NodeVector::reference
typename std::vector< T >::reference reference
Definition: OGDFVector.h:45
ogdf::internal::gcm::datastructure::EdgeVector::operator[]
reference operator[](const Edge &e)
Definition: OGDFVector.h:126
OGDF_ASSERT
#define OGDF_ASSERT(expr)
Assert condition expr. See doc/build.md for more information.
Definition: basic.h:54
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector(const Graph &_g)
Definition: OGDFVector.h:107
ogdf::internal::gcm::datastructure::NodeVector::const_reference
typename std::vector< T >::const_reference const_reference
Definition: OGDFVector.h:46
ogdf::internal::gcm::datastructure::NodeVector::operator[]
reference operator[](const Node &v)
Definition: OGDFVector.h:72
ogdf::internal::gcm::datastructure::NodeVector::Node
typename Graph::Node Node
Definition: OGDFVector.h:44
ogdf::internal::gcm::datastructure::NodeVector::adapt
void adapt()
Definition: OGDFVector.h:66
ogdf::internal::gcm::datastructure::NodeVector::NodeVector
NodeVector(const Graph &_g)
Definition: OGDFVector.h:55
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector(const EdgeVector &x)
Definition: OGDFVector.h:115
ogdf::internal::gcm::datastructure::EdgeVector::adapt
void adapt()
Definition: OGDFVector.h:120
ogdf::internal::gcm::datastructure::EdgeVector::operator=
EdgeVector< T, Graph > & operator=(EdgeVector< T, Graph > &&x)
Definition: OGDFVector.h:142
backward::details::move
const T & move(const T &v)
Definition: backward.hpp:243
ogdf::internal::gcm::datastructure::NodeVector::NodeVector
NodeVector(const NodeVector< T, Graph > &x)
Definition: OGDFVector.h:63
ogdf::internal::gcm::datastructure::NodeVector::NodeVector
NodeVector()
Definition: OGDFVector.h:53
ogdf::internal::gcm::datastructure::EdgeVector::operator[]
const_reference operator[](const Edge &e) const
Definition: OGDFVector.h:131
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector(const EdgeVector &&x)
Definition: OGDFVector.h:117
ogdf::internal::gcm::datastructure::EdgeVector::reference
typename std::vector< T >::reference reference
Definition: OGDFVector.h:99
ogdf::internal::gcm::datastructure::NodeVector::default_value
T default_value
Definition: OGDFVector.h:49
ogdf::internal::gcm::datastructure::NodeVector::g
const Graph * g
Definition: OGDFVector.h:48
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::internal::gcm::datastructure::NodeVector::operator=
NodeVector< T, Graph > & operator=(NodeVector< T, Graph > &&x)
Definition: OGDFVector.h:88
ogdf::internal::gcm::datastructure::EdgeVector::const_reference
typename std::vector< T >::const_reference const_reference
Definition: OGDFVector.h:100
ogdf::internal::gcm::datastructure::EdgeVector::default_value
T default_value
Definition: OGDFVector.h:102
ogdf::internal::gcm::datastructure::NodeVector::NodeVector
NodeVector(const Graph &_g, T v)
Definition: OGDFVector.h:60
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector(const Graph &_g, T v)
Definition: OGDFVector.h:112
ogdf::internal::gcm::datastructure::EdgeVector
Definition: OGDFVector.h:96
std
Definition: GML.h:110
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector()
Definition: OGDFVector.h:105
ogdf::internal::gcm::datastructure::NodeVector::operator[]
const_reference operator[](const Node &v) const
Definition: OGDFVector.h:77
ogdf::internal::gcm::datastructure::NodeVector
Definition: OGDFVector.h:42
ogdf::internal::gcm::datastructure::EdgeVector::operator=
EdgeVector< T, Graph > & operator=(const EdgeVector< T, Graph > &x)
Definition: OGDFVector.h:136
ogdf::internal::gcm::datastructure::EdgeVector::g
const Graph * g
Definition: OGDFVector.h:101
ogdf::internal::gcm::datastructure::EdgeVector::EdgeVector
EdgeVector(const Graph &_g, T &v)
Definition: OGDFVector.h:109
ogdf::internal::gcm::datastructure::EdgeVector::Edge
typename Graph::Edge Edge
Definition: OGDFVector.h:98
ogdf::internal::gcm::datastructure::NodeVector::NodeVector
NodeVector(const Graph &_g, T &v)
Definition: OGDFVector.h:57