#ifndef _HEDRON_HH_
#define _HEDRON_HH_

#include <stream.h>
#include <Matrix.H>

/* $Id: Hedron.H,v 1.1 90/12/03 03:15:22 marc Exp $ */

class Hedron {
 public:
   /* constructors/destructors */
   Hedron(const Matrix&, int, int ...);
   Hedron(const Matrix&, int, const int * = NULL);
   Hedron(const Hedron&);

   ~Hedron();

   /* member fcts */
   inline double VertexCoord(int, int) const;
   inline Matrix &Vertices(void) const;
   inline Matrix &Points(void) const; /* same as Vertices */
   inline int *Edges(void) const;
   inline int NumEdges(void) const;
   void Print(void) const;
   Hedron Clip(const Matrix&) const;
   Hedron& AddEdge(int, int);

   /* overloads */
   friend Hedron operator+(const Hedron&, const Hedron&);
   friend Hedron operator*(const Hedron&, const Matrix&);
   Hedron& operator=(const Hedron&);
   friend ostream& operator<<(ostream&, const Hedron&);

 private:
   Matrix vertices;
   int *edges;
   int num_edges;
};

/* inlines */

inline double Hedron::VertexCoord(int i, int j) const
{
     return vertices(edges[i], j);
}

inline Matrix &Hedron::Vertices(void) const
{
   return(vertices);
}

inline Matrix &Hedron::Points(void) const
{
   return(vertices);
}

inline int *Hedron::Edges(void) const
{
   return(edges);
}

inline int Hedron::NumEdges(void) const
{
   return(num_edges);
}

#endif
