-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.cpp
118 lines (88 loc) · 2.78 KB
/
test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#define __stDEBUG__ 1
#include <iostream>
#include <cstdlib>
#include <arboretum/stDiskPageManager.h>
#include "stHyperCube.h"
#include "stRTree.h"
int main()
{
stHyperCube* cube0 = new stHyperCube;
stHyperCube* cube1 = new stHyperCube;
//for (idx = 0; idx < DIMENSION ; idx++) {
cube0->AddInterval(0, 0, 10);
cube0->AddInterval(1, 10, 20);
cube1->AddInterval(0, 5, 15);
cube1->AddInterval(1, 5, 10);
if(cube0->Intersection(cube1))
std::cout << "Intersection0\n";
if(cube1->Intersection(cube0))
std::cout << "Intersection1\n";
stHyperCube* mbr3 = new stHyperCube(*(stHyperCube*)cube0->GetUnionMBR(cube1));
stHyperCube* c = new stHyperCube;
c->Unserialize( cube0->Serialize(), cube0->GetSerializedSize());
c->Print(std::cout);
cube0->Print(std::cout);
cube1->Print(std::cout);
Point p(3);
p[0] = 0;
p[1] = 0;
p[2] = 0;
std::cout << "dist(p, cube0) = " << cube0->GetMinDist(p) << "\n";
for (int i = 0; i < DIMENSION;i++) {
std::cout << mbr3->GetBegin(i) << " - " << mbr3->GetEnd(i) << "\n";
}
std::cout << "\n";
stMBR* mbr = (stHyperCube*)mbr3->Clone();
//stMBR* mbr = mbr3;
std::cout << mbr->GetArea() << "\n";
stHyperCube* mbrTmp = (stHyperCube*)mbr;
mbrTmp->Serialize();
std::cout << mbrTmp->GetArea() << "\n";
stDiskPageManager* pageManager = new stDiskPageManager();
pageManager->Create("index", PAGE_SIZE);
stRTree<stHyperCube>* rtree = new stRTree<stHyperCube>(pageManager);
typedef std::pair<stDistance, stDistance> Elem;
std::vector<Elem > v;
v.push_back(Elem(2,3));
v.push_back(Elem(2,5));
v.push_back(Elem(6,4));
v.push_back(Elem(8,2));
v.push_back(Elem(9,4));
v.push_back(Elem(7,7));
v.push_back(Elem(1,4));
v.push_back(Elem(7,1));
v.push_back(Elem(7,6));
for (i = 0; i < v.size(); i++) {
stHyperCube* obj = new stHyperCube;
obj->AddInterval(0, v[i].first, v[i].first);
obj->AddInterval(1, v[i].second, v[i].second);
obj->SetOID(i+1);
rtree->Add(obj);
delete obj;
}
rtree->Print(std::cout);
std::cin.get();
stHyperCube* oldValue = new stHyperCube;
oldValue->AddInterval(0, v[0].first, v[0].first);
oldValue->AddInterval(1, v[0].second, v[0].second);
stHyperCube* newValue = new stHyperCube;
newValue->AddInterval(0, 1);
newValue->AddInterval(1, 1);
oldValue->Print(std::cout);
newValue->Print(std::cout);
if ( rtree->UpdateData(oldValue, newValue) ) {
rtree->Print(std::cout);
std::cin.get();
}
stHyperCube* query = new stHyperCube;
query->AddInterval(0, 6);
query->AddInterval(1, 2);
stRTree<stHyperCube>::tResult* result = rtree->NearestQuery(query, 3);
for (i = 0; i < result->GetNumOfEntries(); i++) {
std::cout << "OID: " << ((stHyperCube*)(*result)[i].GetObject())->GetOID() << "\n";
((stHyperCube*)(*result)[i].GetObject())->Print(std::cout);
}
delete rtree;
delete pageManager;
return 0;
}