29 #include "Node/Node.hpp"
37 std::ostream &operator<<(std::ostream &o,
const Edge<T> &edge);
43 std::pair<const Node<T> *,
const Node<T> *> nodePair;
47 Edge(
const unsigned long id,
const std::pair<
const Node<T> *,
const Node<T> *> &nodepair);
48 virtual ~
Edge() =
default;
49 const unsigned long &getId()
const;
50 const std::pair<const Node<T> *,
const Node<T> *> &getNodePair()
const;
51 virtual const std::optional<bool> isDirected()
const;
52 virtual const std::optional<bool> isWeighted()
const;
54 virtual bool operator==(
const Edge<T> &b)
const;
55 bool operator<(
const Edge<T> &b)
const;
59 friend std::ostream &operator<< <>(std::ostream &os,
const Edge<T> &edge);
69 Edge<T>::Edge(
const unsigned long id,
const std::pair<
const Node<T> *,
const Node<T> *> &nodepair) : nodePair(nodepair)
75 const unsigned long &Edge<T>::getId()
const
81 const std::pair<const Node<T> *,
const Node<T> *> &Edge<T>::getNodePair()
const
87 const std::optional<bool> Edge<T>::isDirected()
const
93 const std::optional<bool> Edge<T>::isWeighted()
const
99 bool Edge<T>::operator==(
const Edge<T> &b)
const
101 return (this->
id == b.id && this->nodePair == b.nodePair);
104 template <
typename T>
105 bool Edge<T>::operator<(
const Edge<T> &b)
const
107 return (this->
id < b.id);
110 template <
typename T>
111 std::ostream &operator<<(std::ostream &os,
const Edge<T> &edge)
113 os <<
"((Node: " << edge.nodePair.first->getId() <<
")) ?----- |Edge: " << edge.id <<
"|-----? ((Node: " << edge.nodePair.second->getId() <<
"))";