//-*-c++-*-
#ifndef Tulip_SUPERGRAPHABSTRACT_H
#define Tulip_SUPERGRAPHABSTRACT_H

#include "SuperGraph.h"

class SelectionProxy;

///Abstract class for default graph operations.
class SuperGraphAbstract:public SuperGraph
{
public:
  SuperGraphAbstract();
  ~SuperGraphAbstract();
  //=======================================
  ///
  virtual int deg(const node) const;
  ///
  virtual int indeg(const node) const;
  ///
  virtual int outdeg(const node) const;
  ///
  virtual node source(const edge) const;
  ///
  virtual node target(const edge) const;
  ///
  virtual node opposite(const edge, const node)const;
  ///
  virtual void reverse(const edge);
  //=======================================
  ///
  virtual bool isTree();
  ///
  virtual bool isAcyclic();
  ///
  virtual int numberOfNodes() const;
  ///
  virtual int numberOfEdges() const;
private:
  bool acyclicTest(node n,SelectionProxy *,SelectionProxy *);
};

#endif
