25template<
typename TNode,
typename TEdge>
70 template<
typename ... Params>
77 template<
typename ... Params>
102 std::string
name()
const override;
110template<
typename TNode,
typename TEdge>
112 return m_adjacency_list;
115template<
typename TNode,
typename TEdge>
117 return std::move(m_adjacency_list);
122template<
typename TNode,
typename TEdge>
127template<
typename TNode,
typename TEdge>
129 m_adjacency_list[std::forward<TNode>(n)];
132template<
typename TNode,
typename TEdge>
133template<
typename... Params>
135 addNode(TNode(std::forward<Params>(params) ...));
140template<
typename TNode,
typename TEdge>
147template<
typename TNode,
typename TEdge>
150 m_adjacency_list[e.second].insert(
ext::make_pair(e.first, std::forward<TEdge>(e)));
154template<
typename TNode,
typename TEdge>
155template<
typename... Params>
157 return addEdge(TEdge(std::forward<Params>(params) ...));
162template<
typename TNode,
typename TEdge>
164 return m_adjacency_list.size();
167template<
typename TNode,
typename TEdge>
171 for (
const auto &
i: m_adjacency_list) {
172 cnt +=
i.second.size();
180template<
typename TNode,
typename TEdge>
184 for (
const auto &
i: m_adjacency_list) {
191template<
typename TNode,
typename TEdge>
195 for (
const auto &
i:m_adjacency_list) {
196 for (
const auto &j :
i.second) {
197 vec.push_back(j.second);
206template<
typename TNode,
typename TEdge>
210 if (m_adjacency_list.count(n) == 0) {
214 for (
const auto &
i: m_adjacency_list.at(n)) {
221template<
typename TNode,
typename TEdge>
225 if (m_adjacency_list.count(n) == 0) {
229 for (
const auto &
i: m_adjacency_list.at(n)) {
230 vec.push_back(
i.second);
236template<
typename TNode,
typename TEdge>
238 return successors(n);
241template<
typename TNode,
typename TEdge>
243 return successorEdges(n);
248template<
typename TNode,
typename TEdge>
250 return "UndirectedMultiGraph";
255template<
typename TNode,
typename TEdge>
257 ostream <<
"(" << name() <<
" ";
258 for (
const auto &
i : m_adjacency_list) {
259 ostream <<
i.first <<
" <-->" << std::endl;
261 for (
const auto &j :
i.second) {
262 ostream <<
"\t\t" << j.first <<
" " << j.second << std::endl;
282template<
typename TNode,
typename TEdge>
289 for (
auto &&j:
i.second) {
293 graph.addNode(first);
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: GraphInterface.hpp:19
TEdge edge_type
Definition: GraphInterface.hpp:23
TNode node_type
Definition: GraphInterface.hpp:22
static DefaultNodeType normalizeNode(TNode &&node)
Definition: Normalize.hpp:47
static DefaultEdgeType normalizeEdge(TEdge &&edge)
Definition: Normalize.hpp:52
Definition: UndirectedMultiGraph.hpp:26
void operator>>(ext::ostream &ostream) const override
Definition: UndirectedMultiGraph.hpp:256
bool addEdge(Params &&... params)
Definition: UndirectedMultiGraph.hpp:156
void addNode(Params &&... params)
Definition: UndirectedMultiGraph.hpp:134
size_t edgeCount() const override
Definition: UndirectedMultiGraph.hpp:168
void addNode(const TNode &n)
Definition: UndirectedMultiGraph.hpp:123
size_t nodeCount() const override
Definition: UndirectedMultiGraph.hpp:163
const ext::map< TNode, std::multimap< TNode, TEdge > > & getAdjacencyList() const &
Definition: UndirectedMultiGraph.hpp:111
ext::set< TNode > getNodes() const override
Definition: UndirectedMultiGraph.hpp:181
ext::set< TNode > successors(const TNode &n) const override
Definition: UndirectedMultiGraph.hpp:207
ext::vector< TEdge > getEdges() const override
Definition: UndirectedMultiGraph.hpp:192
bool operator==(const UndirectedMultiGraph &other) const
Definition: UndirectedMultiGraph.hpp:57
std::string name() const override
Definition: UndirectedMultiGraph.hpp:249
bool addEdge(TEdge &&e)
Definition: UndirectedMultiGraph.hpp:148
ext::vector< TEdge > successorEdges(const TNode &n) const override
Definition: UndirectedMultiGraph.hpp:222
void addNode(TNode &&n)
Definition: UndirectedMultiGraph.hpp:128
ext::set< TNode > predecessors(const TNode &n) const override
Definition: UndirectedMultiGraph.hpp:237
bool addEdge(const TEdge &e)
Definition: UndirectedMultiGraph.hpp:141
ext::vector< TEdge > predecessorEdges(const TNode &n) const override
Definition: UndirectedMultiGraph.hpp:242
ext::map< TNode, std::multimap< TNode, TEdge > > m_adjacency_list
Definition: UndirectedMultiGraph.hpp:36
p second
Definition: ToRegExpAlgebraic.h:126
int i
Definition: AllEpsilonClosure.h:118
Definition: normalize.hpp:10
Definition: CapacityEdge.hpp:18
Definition: sigHandler.cpp:20
constexpr tuple< Elements &... > tie(Elements &... args) noexcept
Helper of extended tuple of references construction. The tuple is constructed to reffer to values in ...
Definition: tuple.hpp:218
reference_mover< T > make_mover(T ¶m)
Move adaptor construction function specialized to lvalue reference parameter.
Definition: iterator.hpp:468
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: ReconstructPath.hpp:14
Definition: FordFulkerson.hpp:16
static graph::UndirectedMultiGraph eval(graph::UndirectedMultiGraph< TNode, TEdge > &&value)
Definition: UndirectedMultiGraph.hpp:284
Definition: normalize.hpp:13