// Copyright 2016, University of Freiburg, // Chair of Algorithms and Data Structures. // Authors: Patrick Brosi #ifndef UTIL_GRAPH_NODE_H_ #define UTIL_GRAPH_NODE_H_ #include #include namespace util { namespace graph { // forward declaration of Edge template class Edge; template class Node { public: virtual const std::vector*>& getAdjList() const = 0; virtual const std::vector*>& getAdjListOut() const = 0; virtual const std::vector*>& getAdjListIn() const = 0; virtual size_t getDeg() const = 0; virtual size_t getInDeg() const = 0; virtual size_t getOutDeg() const = 0; virtual bool hasEdgeIn(const Edge* e) const = 0; virtual bool hasEdgeOut(const Edge* e) const = 0; virtual bool hasEdge(const Edge* e) const = 0; // add edge to this node's adjacency lists virtual void addEdge(Edge* e) = 0; virtual void removeEdge(Edge* e) = 0; virtual ~Node() = 0; virtual N& pl() = 0; virtual const N& pl() const = 0; }; template inline Node::~Node() {} }} #endif // UTIL_GRAPH_NODE_H_