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>
156 if (e.first == e.second) {
160 auto search_succ = m_succ_list.find(e.first);
161 if (search_succ != m_succ_list.end() && search_succ->second.find(e.second) != search_succ->second.end()) {
173template<
typename TNode,
typename TEdge>
175 if (e.first == e.second) {
179 auto search_succ = m_succ_list.find(e.first);
180 if (search_succ != m_succ_list.end() && search_succ->second.find(e.second) != search_succ->second.end()) {
187 m_pred_list[e.second].insert(
ext::make_pair(e.first, std::forward<TEdge>(e)));
192template<
typename TNode,
typename TEdge>
193template<
typename... Params>
195 return addEdge(TEdge(std::forward<Params>(params) ...));
200template<
typename TNode,
typename TEdge>
202 return m_succ_list.size();
204template<
typename TNode,
typename TEdge>
208 for (
const auto &
i: m_succ_list) {
209 cnt +=
i.second.size();
217template<
typename TNode,
typename TEdge>
221 for (
const auto &
i: m_succ_list) {
228template<
typename TNode,
typename TEdge>
232 for (
const auto &
i: m_succ_list) {
233 for (
const auto &j :
i.second) {
234 vec.push_back(j.second);
243template<
typename TNode,
typename TEdge>
247 if (m_succ_list.count(n) == 0) {
251 for (
const auto &
i: m_succ_list.at(n)) {
258template<
typename TNode,
typename TEdge>
262 if (m_succ_list.count(n) == 0) {
266 for (
const auto &
i: m_succ_list.at(n)) {
267 vec.push_back(
i.second);
273template<
typename TNode,
typename TEdge>
277 if (m_pred_list.count(n) == 0) {
281 for (
const auto &
i: m_pred_list.at(n)) {
288template<
typename TNode,
typename TEdge>
292 if (m_pred_list.count(n) == 0) {
296 for (
const auto &
i: m_pred_list.at(n)) {
297 vec.push_back(
i.second);
305template<
typename TNode,
typename TEdge>
307 return "DirectedGraph";
312template<
typename TNode,
typename TEdge>
314 ostream <<
"(" << name() <<
" ";
315 for (
const auto &
i : m_succ_list) {
316 ostream <<
i.first <<
" -->" << std::endl;
318 for (
const auto &j :
i.second) {
319 ostream <<
"\t\t" << j.first <<
" " << j.second << std::endl;
339template<
typename TNode,
typename TEdge>
347 for (
auto &&j:
i.second) {
351 graph.addNode(first);
360 for (
auto &&j:
i.second) {
364 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: DirectedGraph.hpp:26
ext::set< TNode > predecessors(const TNode &n) const override
Definition: DirectedGraph.hpp:274
const ext::map< TNode, ext::map< TNode, TEdge > > & getSuccessorList() const &
Definition: DirectedGraph.hpp:113
void addNode(TNode &&n)
Definition: DirectedGraph.hpp:141
TNode node_type
Definition: DirectedGraph.hpp:30
size_t edgeCount() const override
Definition: DirectedGraph.hpp:205
std::string name() const override
Definition: DirectedGraph.hpp:306
void addNode(const TNode &n)
Definition: DirectedGraph.hpp:135
bool addEdge(const TEdge &e)
Definition: DirectedGraph.hpp:155
ext::vector< TEdge > predecessorEdges(const TNode &n) const override
Definition: DirectedGraph.hpp:289
void operator>>(ext::ostream &ostream) const override
Definition: DirectedGraph.hpp:313
void addNode(Params &&... params)
Definition: DirectedGraph.hpp:148
size_t nodeCount() const override
Definition: DirectedGraph.hpp:201
ext::vector< TEdge > successorEdges(const TNode &n) const override
Definition: DirectedGraph.hpp:259
ext::vector< TEdge > getEdges() const override
Definition: DirectedGraph.hpp:229
bool addEdge(TEdge &&e)
Definition: DirectedGraph.hpp:174
bool addEdge(Params &&... params)
Definition: DirectedGraph.hpp:194
bool operator==(const DirectedGraph &other) const
Definition: DirectedGraph.hpp:60
ext::map< TNode, ext::map< TNode, TEdge > > m_pred_list
Definition: DirectedGraph.hpp:37
ext::set< TNode > getNodes() const override
Definition: DirectedGraph.hpp:218
TEdge edge_type
Definition: DirectedGraph.hpp:31
ext::map< TNode, ext::map< TNode, TEdge > > m_succ_list
Definition: DirectedGraph.hpp:36
const ext::map< TNode, ext::map< TNode, TEdge > > & getPredecessorList() const &
Definition: DirectedGraph.hpp:123
ext::set< TNode > successors(const TNode &n) const override
Definition: DirectedGraph.hpp:244
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
graph::DirectedGraph< node::Node, edge::CapacityEdge< node::Node, int > > DirectedGraph
Definition: FordFulkerson.hpp:27
Definition: ReconstructPath.hpp:14
static graph::DirectedGraph eval(graph::DirectedGraph< TNode, TEdge > &&value)
Definition: DirectedGraph.hpp:341
Definition: normalize.hpp:13