ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Tree-M/PMT.cpp
(Generate patch)

Comparing Tree-M/PMT.cpp (file contents):
Revision 1.1 by root, Sun May 6 00:45:51 2001 UTC vs.
Revision 1.3 by root, Sun May 6 17:28:24 2001 UTC

32 } 32 }
33 33
34 return dist; 34 return dist;
35} 35}
36 36
37
38Object::Object(double *pkey)
39{
40 k = pkey;
41
42 // discretize the vector
43 for (int i = NDIMS; i--; )
44 k[i] = int2double (double2int (k[i]));
45}
46
37Object::Object(char *key) 47Object::Object(char *key)
38{ 48{
39 unsigned char *c = (unsigned char *)key; 49 unsigned char *c = (unsigned char *)key;
40 50
41 k = new double [NDIMS]; 51 k = new double [NDIMS];
53 break; 63 break;
54 default: 64 default:
55 abort (); 65 abort ();
56 } 66 }
57 67
58 k[i] = ((double)elem) * ACC->max / ACC->steps + ACC->min; 68 k[i] = int2double(elem);
59 } 69 }
60} 70}
61 71
62void Object::Compress(char *key) 72void Object::Compress(char *key)
63{ 73{
64 unsigned char *c = (unsigned char *)key; 74 unsigned char *c = (unsigned char *)key;
65 75
66 for (int i = 0; i < NDIMS; i++) 76 for (int i = 0; i < NDIMS; i++)
67 { 77 {
68 unsigned long elem = (unsigned long)floor ((k[i] - ACC->min) * ACC->steps / ACC->max); 78 unsigned long elem = double2int (k[i]);
69 79
70 switch (ACC->elemsize) 80 switch (ACC->elemsize)
71 { 81 {
72 case 4: *c++ = (elem >> 24) & 0xff; 82 case 4: *c++ = (elem >> 24) & 0xff;
73 case 3: *c++ = (elem >> 16) & 0xff; 83 case 3: *c++ = (elem >> 16) & 0xff;
145 Object o(k); 155 Object o(k);
146 Pred p(o); 156 Pred p(o);
147 SimpleQuery q(&p, r); 157 SimpleQuery q(&p, r);
148 GiSTlist<MTentry *> res = mt->RangeSearch(q); 158 GiSTlist<MTentry *> res = mt->RangeSearch(q);
149 159
150 while(!res.IsEmpty()) { 160 while(!res.IsEmpty())
161 {
151 MTentry *e = res.RemoveFront (); 162 MTentry *e = res.RemoveFront ();
152
153 add_result(e->Key()->distance, e->Ptr(), e->Key()->obj.data(), ndims); 163 add_result(e->Ptr(), e->Key()->obj.data(), ndims);
154
155 delete e; 164 delete e;
156 } 165 }
157} 166}
158 167
159void PMT::top(double *k, int n) const 168void PMT::top(double *k, int n) const
160{ 169{
161 abort (); 170 SETCUR;
171 Object o(k);
172 Pred p(o);
173 TopQuery q(&p, n);
174 MTentry **res = mt->TopSearch(q);
175
176 for (int i=0; i < n; i++)
177 {
178 MTentry *e = res[i];
179 add_result(e->Ptr(), e->Key()->obj.data(), ndims);
180 delete e;
181 }
162} 182}
183
184int PMT::maxlevel() const
185{
186 SETCUR;
187 return mt->MaxLevel();
188}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines