GiSTcompressedEntry MTentry::Compress() const { GiSTcompressedEntry compressedEntry; double rmin=((MTkey *)key)->minradius(), rmax=((MTkey *)key)->maxradius(), dist=((MTkey *)key)->distance; int sizeofObject=((MTkey *)key)->object().CompressedLength(); BOOL splitted=((MTkey *)key)->splitted, recomp=((MTkey *)key)->recomp; compressedEntry.key=new char[CompressedLength()]; ((MTkey *)key)->object().Compress(compressedEntry.key); // compress the object memcpy(compressedEntry.key+sizeofObject, &rmin, sizeof(double)); memcpy(compressedEntry.key+sizeofObject+sizeof(double), &rmax, sizeof(double)); memcpy(compressedEntry.key+sizeofObject+2*sizeof(double), &dist, sizeof(double)); memcpy(compressedEntry.key+sizeofObject+3*sizeof(double), &splitted, sizeof(BOOL)); memcpy(compressedEntry.key+sizeofObject+3*sizeof(double)+sizeof(BOOL), &recomp, sizeof(BOOL)); // Object obj(compressedEntry.key); // decompress the object compressedEntry.keyLen=CompressedLength(); compressedEntry.ptr=ptr; return compressedEntry; }
GiSTcompressedEntry MTentry::Compress () const { double rmin = ((MTkey *)key)->MinRadius(), rmax = ((MTkey *)key)->MaxRadius(), dist = ((MTkey *)key)->distance; BOOL splitted = ((MTkey *)key)->splitted, recomp = ((MTkey *)key)->recomp; GiSTcompressedEntry compressedEntry; compressedEntry.keyLen = CompressedLength (); compressedEntry.ptr = ptr; compressedEntry.key = new char[compressedEntry.keyLen]; ((MTkey *)key)->object().Compress(compressedEntry.key); // compress the object int objSize = ((MTkey *)key)->object().CompressedLength (); memcpy (compressedEntry.key+objSize, &rmin, sizeof(double)); memcpy (compressedEntry.key+objSize+sizeof(double), &rmax, sizeof(double)); memcpy (compressedEntry.key+objSize+2*sizeof(double), &dist, sizeof(double)); memcpy (compressedEntry.key+objSize+3*sizeof(double), &splitted, sizeof(BOOL)); memcpy (compressedEntry.key+objSize+3*sizeof(double)+sizeof(BOOL), &recomp, sizeof(BOOL)); return compressedEntry; }