25template<
typename TNode,
typename TEdge>
72 template<
typename ... Params>
79 template<
typename ... Params>
104 std::string
name()
const override;
112template<
typename TNode,
typename TEdge>
117template<
typename TNode,
typename TEdge>
119 return std::move(m_succ_list);
122template<
typename TNode,
typename TEdge>
127template<
typename TNode,
typename TEdge>
129 return std::move(m_pred_list);
134template<
typename TNode,
typename TEdge>
140template<
typename TNode,
typename TEdge>
143 m_pred_list[std::forward<TNode>(n)];
146template<
typename TNode,
typename TEdge>
147template<
typename... Params>
149 addNode(TNode(std::forward<Params>(params) ...));
154template<
typename TNode,
typename TEdge>
161template<
typename TNode,
typename TEdge>
164 m_pred_list[e.second].insert(
ext::make_pair(e.first, std::forward<TEdge>(e)));
168template<
typename TNode,
typename TEdge>
169template<
typename... Params>
171 return addEdge(TEdge(std::forward<Params>(params) ...));
176template<
typename TNode,
typename TEdge>
178 return m_succ_list.size();
180template<
typename TNode,
typename TEdge>
184 for (
const auto &
i: m_succ_list) {
185 cnt +=
i.second.size();
193template<
typename TNode,
typename TEdge>
197 for (
const auto &
i: m_succ_list) {
204template<
typename TNode,
typename TEdge>
208 for (
const auto &
i: m_succ_list) {
209 for (
const auto &j :
i.second) {
210 vec.push_back(j.second);
219template<
typename TNode,
typename TEdge>
223 if (m_succ_list.count(n) == 0) {
227 for (
const auto &
i: m_succ_list.at(n)) {
234template<
typename TNode,
typename TEdge>
238 if (m_succ_list.count(n) == 0) {
242 for (
const auto &
i: m_succ_list.at(n)) {
243 vec.push_back(
i.second);
249template<
typename TNode,
typename TEdge>
253 if (m_pred_list.count(n) == 0) {
257 for (
const auto &
i: m_pred_list.at(n)) {
264template<
typename TNode,
typename TEdge>
268 if (m_pred_list.count(n) == 0) {
272 for (
const auto &
i: m_pred_list.at(n)) {
273 vec.push_back(
i.second);
281template<
typename TNode,
typename TEdge>
283 return "DirectedMultiGraph";
288template<
typename TNode,
typename TEdge>
290 ostream <<
"(" << name() <<
" ";
291 for (
const auto &
i : m_succ_list) {
292 ostream <<
i.first <<
" -->" << std::endl;
294 for (
const auto &j :
i.second) {
295 ostream <<
"\t\t" << j.first <<
" " << j.second << std::endl;
315template<
typename TNode,
typename TEdge>
323 for (
auto &&j:
i.second) {
327 graph.addNode(first);
336 for (
auto &&j:
i.second) {
340 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: DirectedMultiGraph.hpp:26
ext::set< TNode > successors(const TNode &n) const override
Definition: DirectedMultiGraph.hpp:220
TNode node_type
Definition: DirectedMultiGraph.hpp:30
bool operator==(const DirectedMultiGraph &other) const
Definition: DirectedMultiGraph.hpp:60
size_t nodeCount() const override
Definition: DirectedMultiGraph.hpp:177
size_t edgeCount() const override
Definition: DirectedMultiGraph.hpp:181
bool addEdge(Params &&... params)
Definition: DirectedMultiGraph.hpp:170
virtual void addNode(const TNode &n)
Definition: DirectedMultiGraph.hpp:135
void addNode(Params &&... params)
Definition: DirectedMultiGraph.hpp:148
ext::vector< TEdge > successorEdges(const TNode &n) const override
Definition: DirectedMultiGraph.hpp:235
ext::map< TNode, std::multimap< TNode, TEdge > > m_succ_list
Definition: DirectedMultiGraph.hpp:36
ext::set< TNode > predecessors(const TNode &n) const override
Definition: DirectedMultiGraph.hpp:250
virtual bool addEdge(const TEdge &e)
Definition: DirectedMultiGraph.hpp:155
virtual void addNode(TNode &&n)
Definition: DirectedMultiGraph.hpp:141
std::string name() const override
Definition: DirectedMultiGraph.hpp:282
ext::vector< TEdge > getEdges() const override
Definition: DirectedMultiGraph.hpp:205
ext::vector< TEdge > predecessorEdges(const TNode &n) const override
Definition: DirectedMultiGraph.hpp:265
virtual bool addEdge(TEdge &&e)
Definition: DirectedMultiGraph.hpp:162
ext::map< TNode, std::multimap< TNode, TEdge > > m_pred_list
Definition: DirectedMultiGraph.hpp:37
void operator>>(ext::ostream &ostream) const override
Definition: DirectedMultiGraph.hpp:289
const ext::map< TNode, std::multimap< TNode, TEdge > > & getSuccessorList() const &
Definition: DirectedMultiGraph.hpp:113
const ext::map< TNode, std::multimap< TNode, TEdge > > & getPredecessorList() const &
Definition: DirectedMultiGraph.hpp:123
ext::set< TNode > getNodes() const override
Definition: DirectedMultiGraph.hpp:194
TEdge edge_type
Definition: DirectedMultiGraph.hpp:31
Definition: GraphInterface.hpp:19
static DefaultNodeType normalizeNode(TNode &&node)
Definition: Normalize.hpp:47
static DefaultEdgeType normalizeEdge(TEdge &&edge)
Definition: Normalize.hpp:52
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::DirectedMultiGraph eval(graph::DirectedMultiGraph< TNode, TEdge > &&value)
Definition: DirectedMultiGraph.hpp:317
Definition: normalize.hpp:13