25template<
typename TNode,
typename TEdge>
79 template<
typename ... Params>
86 template<
typename ... Params>
91 template<
typename ... Params>
116 std::string
name()
const override;
124template<
typename TNode,
typename TEdge>
126 return m_adjacency_list;
129template<
typename TNode,
typename TEdge>
131 return std::move(m_adjacency_list);
134template<
typename TNode,
typename TEdge>
139template<
typename TNode,
typename TEdge>
141 return std::move(m_succ_list);
144template<
typename TNode,
typename TEdge>
149template<
typename TNode,
typename TEdge>
151 return std::move(m_pred_list);
156template<
typename TNode,
typename TEdge>
163template<
typename TNode,
typename TEdge>
167 m_pred_list[std::forward<TNode>(n)];
170template<
typename TNode,
typename TEdge>
171template<
typename... Params>
173 addNode(TNode(std::forward<Params>(params) ...));
178template<
typename TNode,
typename TEdge>
188template<
typename TNode,
typename TEdge>
193 m_adjacency_list[e.second].insert(
ext::make_pair(e.first, std::forward<TEdge>(e)));
198template<
typename TNode,
typename TEdge>
199template<
typename... Params>
201 return addEdge(TEdge(std::forward<Params>(params) ...));
204template<
typename TNode,
typename TEdge>
214template<
typename TNode,
typename TEdge>
219 m_pred_list[e.second].insert(
ext::make_pair(e.first, std::forward<TEdge>(e)));
224template<
typename TNode,
typename TEdge>
225template<
typename... Params>
227 return addArc(TEdge(std::forward<Params>(params)...));
232template<
typename TNode,
typename TEdge>
234 return m_adjacency_list.size();
236template<
typename TNode,
typename TEdge>
240 for (
const auto &
i: m_adjacency_list) {
241 cnt +=
i.second.size();
246 for (
const auto &
i: m_succ_list) {
247 cnt +=
i.second.size();
255template<
typename TNode,
typename TEdge>
259 for (
const auto &
i: m_adjacency_list) {
266template<
typename TNode,
typename TEdge>
270 for (
const auto &
i: m_adjacency_list) {
271 for (
const auto &j :
i.second) {
272 vec.push_back(j.second);
276 for (
const auto &
i: m_succ_list) {
277 for (
const auto &j :
i.second) {
278 vec.push_back(j.second);
287template<
typename TNode,
typename TEdge>
291 if (m_adjacency_list.count(n) == 0) {
295 for (
const auto &
i: m_adjacency_list.at(n)) {
299 for (
const auto &
i: m_succ_list.at(n)) {
306template<
typename TNode,
typename TEdge>
310 if (m_succ_list.count(n) == 0) {
314 for (
const auto &
i: m_adjacency_list.at(n)) {
315 vec.push_back(
i.second);
318 for (
const auto &
i: m_succ_list.at(n)) {
319 vec.push_back(
i.second);
325template<
typename TNode,
typename TEdge>
329 if (m_pred_list.count(n) == 0) {
333 for (
const auto &
i: m_adjacency_list.at(n)) {
337 for (
const auto &
i: m_pred_list.at(n)) {
344template<
typename TNode,
typename TEdge>
348 if (m_pred_list.count(n) == 0) {
352 for (
const auto &
i: m_adjacency_list.at(n)) {
353 vec.push_back(
i.second);
356 for (
const auto &
i: m_pred_list.at(n)) {
357 vec.push_back(
i.second);
365template<
typename TNode,
typename TEdge>
367 return "MixedMultiGraph";
372template<
typename TNode,
typename TEdge>
374 ostream <<
"(" << name() <<
" ";
375 for (
const auto &
i : m_adjacency_list) {
376 ostream <<
i.first <<
" <-->" << std::endl;
378 for (
const auto &j :
i.second) {
379 ostream <<
"\t\t" << j.first <<
" " << j.second << std::endl;
382 ostream <<
i.first <<
" -->" << std::endl;
383 for (
const auto &j : m_succ_list.at(
i.first)) {
384 ostream <<
"\t\t" << j.first <<
" " << j.second << std::endl;
404template<
typename TNode,
typename TEdge>
412 for (
auto &&j:
i.second) {
416 graph.addNode(first);
425 for (
auto &&j:
i.second) {
429 graph.addNode(first);
438 for (
auto &&j:
i.second) {
442 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: MixedMultiGraph.hpp:26
ext::map< TNode, std::multimap< TNode, TEdge > > m_succ_list
Definition: MixedMultiGraph.hpp:39
bool operator==(const MixedMultiGraph &other) const
Definition: MixedMultiGraph.hpp:67
size_t nodeCount() const override
Definition: MixedMultiGraph.hpp:233
ext::vector< TEdge > successorEdges(const TNode &n) const override
Definition: MixedMultiGraph.hpp:307
const ext::map< TNode, std::multimap< TNode, TEdge > > & getAdjacencyList() const &
Definition: MixedMultiGraph.hpp:125
bool addEdge(TEdge &&e)
Definition: MixedMultiGraph.hpp:189
bool addArc(Params &&... params)
Definition: MixedMultiGraph.hpp:226
ext::set< TNode > getNodes() const override
Definition: MixedMultiGraph.hpp:256
size_t edgeCount() const override
Definition: MixedMultiGraph.hpp:237
ext::set< TNode > successors(const TNode &n) const override
Definition: MixedMultiGraph.hpp:288
bool addEdge(Params &&... params)
Definition: MixedMultiGraph.hpp:200
void addNode(Params &&... params)
Definition: MixedMultiGraph.hpp:172
ext::set< TNode > predecessors(const TNode &n) const override
Definition: MixedMultiGraph.hpp:326
ext::vector< TEdge > predecessorEdges(const TNode &n) const override
Definition: MixedMultiGraph.hpp:345
std::string name() const override
Definition: MixedMultiGraph.hpp:366
bool addArc(TEdge &&e)
Definition: MixedMultiGraph.hpp:215
const ext::map< TNode, std::multimap< TNode, TEdge > > & getSuccessorList() const &
Definition: MixedMultiGraph.hpp:135
void addNode(TNode &&n)
Definition: MixedMultiGraph.hpp:164
ext::vector< TEdge > getEdges() const override
Definition: MixedMultiGraph.hpp:267
bool addEdge(const TEdge &e)
Definition: MixedMultiGraph.hpp:179
void addNode(const TNode &n)
Definition: MixedMultiGraph.hpp:157
const ext::map< TNode, std::multimap< TNode, TEdge > > & getPredecessorList() const &
Definition: MixedMultiGraph.hpp:145
void operator>>(ext::ostream &ostream) const override
Definition: MixedMultiGraph.hpp:373
ext::map< TNode, std::multimap< TNode, TEdge > > m_adjacency_list
Definition: MixedMultiGraph.hpp:36
bool addArc(const TEdge &e)
Definition: MixedMultiGraph.hpp:205
ext::map< TNode, std::multimap< TNode, TEdge > > m_pred_list
Definition: MixedMultiGraph.hpp:40
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::MixedMultiGraph eval(graph::MixedMultiGraph< TNode, TEdge > &&value)
Definition: MixedMultiGraph.hpp:406
Definition: normalize.hpp:13