#ifndef OBJECT_H
#define OBJECT_H
#include <cstring>
#include <cstdio>
#include "PMT.h"
inline double maxDist() { return ACC->maxDist; }
inline int sizeofObject() { return ACC->ndims * ACC->elemsize; }
class Object : public GiSTobject // the DB object class
{
velem *k;
static double int2double(velem i) {
return i * ACC->max / ACC->steps + ACC->min;
}
static velem double2int(double d) {
return (velem)floor ((d - ACC->min) * ACC->steps / ACC->max);
}
public:
Object() {
k = new velem [NDIMS];
for (int i = NDIMS; i--; )
k[i] = ACC->vzero;
}
Object(double *pkey);
~Object() {
delete [] k;
}
Object(const Object& obj) {
k = new velem [NDIMS];
memcpy (k, obj.k, NDIMS * sizeof (velem));
}
Object& operator=(const Object& obj) {
delete [] k;
k = new velem [NDIMS];
memcpy (k, obj.k, NDIMS * sizeof (velem));
}
double area(double r) const {
return 0;
}
double *data() const;
double distance(const Object& other) const; // distance method (needed)
int operator ==(const Object& obj) const
{
return !memcmp (k, obj.k, NDIMS * sizeof (velem));
}
int operator !=(const Object& obj) const
{
return !(*this==obj);
}
int CompressedLength() const {
return sizeofObject();
}
Object(char *key);
void Compress(char *key);
};
#endif