#include <stdlib.h>
#include <SolidFace.H>

SolidFace::SolidFace(const int num_v, const int *verts, const int
		     num_n, const int *norms, double Ka, double Kd,
		     double Ks, double Ref)
{
     int *nv, *nn;

     vertices = new int[num_v];
     normals = new int[num_n];
     colors = new double[num_n];
     bcopy((char *) verts, vertices, num_v*sizeof(int));
     bcopy((char *) norms, normals, num_n*sizeof(int));
     bzero((char *) colors, num_n*sizeof(double));

     num_verts = num_v;
     num_norms = num_n;
     ka = Ka; kd = Kd; ks = Ks; ref = Ref;
}

SolidFace::SolidFace(const SolidFace& face)
{
     vertices = new int[face.NumVerts()];
     normals = new int[face.NumNorms()];
     colors = new double[face.NumNorms()];
     
     bcopy((char *) face.VIndxs(), vertices, face.NumVerts()*sizeof(int));
     bcopy((char *) face.NIndxs(), normals, face.NumNorms()*sizeof(int));
     bcopy((char *) face.Colors(), colors, face.NumNorms()*sizeof(double));

     num_verts = face.NumVerts();
     num_norms = face.NumNorms();

     ka = face.ka;
     kd = face.kd;
     ks = face.ks;
     ref = face.ref;
}

SolidFace::~SolidFace()
{
     delete [num_verts] vertices;
     delete [num_norms] normals;
     delete [num_norms] colors;
}

SolidFace& SolidFace::operator=(const SolidFace& face)
{
     delete [num_verts] vertices;
     delete [num_norms] normals;
     delete [num_norms] colors;
     
     vertices = new int[face.NumVerts()];
     normals = new int[face.NumNorms()];
     colors = new double[face.NumNorms()];
     
     bcopy((char *) face.VIndxs(), vertices, face.NumVerts()*sizeof(int));
     bcopy((char *) face.NIndxs(), normals, face.NumNorms()*sizeof(int));
     bcopy((char *) face.Colors(), colors, face.NumNorms()*sizeof(double));

     num_verts = face.NumVerts();
     num_norms = face.NumNorms();

     ka = face.ka;
     kd = face.kd;
     ks = face.ks;
     ref = face.ref;

     return *this;
}
