// Test of closest pair algorithms
// David Eppstein, UC Irvine, 19 Apr 1997
//
// Generate n vectors in R^d, with varying distances

#include "PointSet.h"

class VectorPointSet : public PointSet {
	double * points;

 protected:
	int d;

 public:
 	virtual double VecDistance(double *, double *) { return 0.0; }
 	VectorPointSet(unsigned long npoints, int dim);
 	~VectorPointSet() { delete points; }
 	double operator() (point i, point j) {
 		gDistances++;
 		return VecDistance(points+i*d, points+j*d);
 	}
 	void interact(point, point);
};

class VectorL1 : public VectorPointSet {
 public:
 	VectorL1 (unsigned long np, int dim) : VectorPointSet(np, dim) { ; }
	double VecDistance(double *, double *);
};

class VectorL2 : public VectorPointSet {
 public:
 	VectorL2 (unsigned long np, int dim) : VectorPointSet(np, dim) { ; }
	double VecDistance(double *, double *);
};

class VectorLinf : public VectorPointSet {
 public:
 	VectorLinf (unsigned long np, int dim) : VectorPointSet(np, dim) { ; }
	double VecDistance(double *, double *);
};

class VectorDot : public VectorPointSet {
 public:
 	VectorDot (unsigned long np, int dim) : VectorPointSet(np, dim) { ; }
	double VecDistance(double *, double *);
};
