00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GEOS_INDEX_STRTREE_BOUNDABLEPAIR_H
00020 #define GEOS_INDEX_STRTREE_BOUNDABLEPAIR_H
00021
00022 #include <geos/index/strtree/Boundable.h>
00023 #include <geos/index/strtree/ItemDistance.h>
00024 #include <queue>
00025
00040 using namespace geos::index::strtree;
00041
00042
00043 namespace geos {
00044 namespace index {
00045 namespace strtree {
00046 class BoundablePair {
00047 private:
00048 const Boundable* boundable1;
00049 const Boundable* boundable2;
00050 ItemDistance* itemDistance;
00051 double mDistance;
00052
00053 public:
00054 struct BoundablePairQueueCompare {
00055 bool operator()(const BoundablePair* a, const BoundablePair* b) {
00056 return a->getDistance() > b->getDistance();
00057 }
00058 };
00059
00060 typedef std::priority_queue<BoundablePair*, std::vector<BoundablePair*>, BoundablePairQueueCompare> BoundablePairQueue;
00061 BoundablePair(const Boundable* boundable1, const Boundable* boundable2, ItemDistance* itemDistance);
00062
00070 const Boundable* getBoundable(int i) const;
00071
00081 double distance() const;
00082
00093 double getDistance() const;
00094
00100 bool isLeaves() const;
00101
00102 static bool isComposite(const Boundable* item);
00103
00104 static double area(const Boundable* b);
00105
00106 void expandToQueue(BoundablePairQueue &, double minDistance);
00107 void expand(const Boundable* bndComposite, const Boundable* bndOther, BoundablePairQueue & priQ, double minDistance);
00108 };
00109 }
00110 }
00111 }
00112
00113 #endif
00114