mirror of
https://github.com/MCLx86/xtreemtest.git
synced 2025-12-15 19:15:32 +01:00
Initial commit
This commit is contained in:
261
builddir/spatialindex-1.8.5/include/spatialindex/SpatialIndex.h
Normal file
261
builddir/spatialindex-1.8.5/include/spatialindex/SpatialIndex.h
Normal file
@@ -0,0 +1,261 @@
|
||||
/******************************************************************************
|
||||
* Project: libspatialindex - A C++ library for spatial indexing
|
||||
* Author: Marios Hadjieleftheriou, mhadji@gmail.com
|
||||
******************************************************************************
|
||||
* Copyright (c) 2003, Marios Hadjieleftheriou
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "tools/Tools.h"
|
||||
|
||||
#ifndef M_PI_2
|
||||
#define M_PI_2 1.57079632679489661922
|
||||
#endif
|
||||
|
||||
namespace SpatialIndex
|
||||
{
|
||||
class Point;
|
||||
class LineSegment;
|
||||
class Region;
|
||||
|
||||
|
||||
typedef int64_t id_type;
|
||||
|
||||
SIDX_DLL enum CommandType
|
||||
{
|
||||
CT_NODEREAD = 0x0,
|
||||
CT_NODEDELETE,
|
||||
CT_NODEWRITE
|
||||
};
|
||||
|
||||
class SIDX_DLL InvalidPageException : public Tools::Exception
|
||||
{
|
||||
public:
|
||||
InvalidPageException(id_type id);
|
||||
virtual ~InvalidPageException() {}
|
||||
virtual std::string what();
|
||||
|
||||
private:
|
||||
std::string m_error;
|
||||
}; // InvalidPageException
|
||||
|
||||
//
|
||||
// Interfaces
|
||||
//
|
||||
|
||||
class SIDX_DLL IShape : public Tools::ISerializable
|
||||
{
|
||||
public:
|
||||
virtual bool intersectsShape(const IShape& in) const = 0;
|
||||
virtual bool containsShape(const IShape& in) const = 0;
|
||||
virtual bool touchesShape(const IShape& in) const = 0;
|
||||
virtual void getCenter(Point& out) const = 0;
|
||||
virtual uint32_t getDimension() const = 0;
|
||||
virtual void getMBR(Region& out) const = 0;
|
||||
virtual double getArea() const = 0;
|
||||
virtual double getMinimumDistance(const IShape& in) const = 0;
|
||||
virtual ~IShape() {}
|
||||
}; // IShape
|
||||
|
||||
class SIDX_DLL ITimeShape : public Tools::IInterval
|
||||
{
|
||||
public:
|
||||
virtual bool intersectsShapeInTime(const ITimeShape& in) const = 0;
|
||||
virtual bool intersectsShapeInTime(const Tools::IInterval& ivI, const ITimeShape& in) const = 0;
|
||||
virtual bool containsShapeInTime(const ITimeShape& in) const = 0;
|
||||
virtual bool containsShapeInTime(const Tools::IInterval& ivI, const ITimeShape& in) const = 0;
|
||||
virtual bool touchesShapeInTime(const ITimeShape& in) const = 0;
|
||||
virtual bool touchesShapeInTime(const Tools::IInterval& ivI, const ITimeShape& in) const = 0;
|
||||
virtual double getAreaInTime() const = 0;
|
||||
virtual double getAreaInTime(const Tools::IInterval& ivI) const = 0;
|
||||
virtual double getIntersectingAreaInTime(const ITimeShape& r) const = 0;
|
||||
virtual double getIntersectingAreaInTime(const Tools::IInterval& ivI, const ITimeShape& r) const = 0;
|
||||
virtual ~ITimeShape() {}
|
||||
}; // ITimeShape
|
||||
|
||||
class SIDX_DLL IEvolvingShape
|
||||
{
|
||||
public:
|
||||
virtual void getVMBR(Region& out) const = 0;
|
||||
virtual void getMBRAtTime(double t, Region& out) const = 0;
|
||||
virtual ~IEvolvingShape() {}
|
||||
}; // IEvolvingShape
|
||||
|
||||
class SIDX_DLL IEntry : public Tools::IObject
|
||||
{
|
||||
public:
|
||||
virtual id_type getIdentifier() const = 0;
|
||||
virtual void getShape(IShape** out) const = 0;
|
||||
virtual ~IEntry() {}
|
||||
}; // IEntry
|
||||
|
||||
class SIDX_DLL INode : public IEntry, public Tools::ISerializable
|
||||
{
|
||||
public:
|
||||
virtual uint32_t getChildrenCount() const = 0;
|
||||
virtual id_type getChildIdentifier(uint32_t index) const = 0;
|
||||
virtual void getChildData(uint32_t index, uint32_t& len, byte** data) const = 0;
|
||||
virtual void getChildShape(uint32_t index, IShape** out) const = 0;
|
||||
virtual uint32_t getLevel() const = 0;
|
||||
virtual bool isIndex() const = 0;
|
||||
virtual bool isLeaf() const = 0;
|
||||
virtual ~INode() {}
|
||||
}; // INode
|
||||
|
||||
class SIDX_DLL IData : public IEntry
|
||||
{
|
||||
public:
|
||||
virtual void getData(uint32_t& len, byte** data) const = 0;
|
||||
virtual ~IData() {}
|
||||
}; // IData
|
||||
|
||||
class SIDX_DLL IDataStream : public Tools::IObjectStream
|
||||
{
|
||||
public:
|
||||
virtual IData* getNext() = 0;
|
||||
virtual ~IDataStream() {}
|
||||
}; // IDataStream
|
||||
|
||||
class SIDX_DLL ICommand
|
||||
{
|
||||
public:
|
||||
virtual void execute(const INode& in) = 0;
|
||||
virtual ~ICommand() {}
|
||||
}; // ICommand
|
||||
|
||||
class SIDX_DLL INearestNeighborComparator
|
||||
{
|
||||
public:
|
||||
virtual double getMinimumDistance(const IShape& query, const IShape& entry) = 0;
|
||||
virtual double getMinimumDistance(const IShape& query, const IData& data) = 0;
|
||||
virtual ~INearestNeighborComparator() {}
|
||||
}; // INearestNeighborComparator
|
||||
|
||||
class SIDX_DLL IStorageManager
|
||||
{
|
||||
public:
|
||||
virtual void loadByteArray(const id_type id, uint32_t& len, byte** data) = 0;
|
||||
virtual void storeByteArray(id_type& id, const uint32_t len, const byte* const data) = 0;
|
||||
virtual void deleteByteArray(const id_type id) = 0;
|
||||
virtual void flush() = 0;
|
||||
virtual ~IStorageManager() {}
|
||||
}; // IStorageManager
|
||||
|
||||
class SIDX_DLL IVisitor
|
||||
{
|
||||
public:
|
||||
virtual void visitNode(const INode& in) = 0;
|
||||
virtual void visitData(const IData& in) = 0;
|
||||
virtual void visitData(std::vector<const IData*>& v) = 0;
|
||||
virtual ~IVisitor() {}
|
||||
}; // IVisitor
|
||||
|
||||
class SIDX_DLL IQueryStrategy
|
||||
{
|
||||
public:
|
||||
virtual void getNextEntry(const IEntry& previouslyFetched, id_type& nextEntryToFetch, bool& bFetchNextEntry) = 0;
|
||||
virtual ~IQueryStrategy() {}
|
||||
}; // IQueryStrategy
|
||||
|
||||
class SIDX_DLL IStatistics
|
||||
{
|
||||
public:
|
||||
virtual uint64_t getReads() const = 0;
|
||||
virtual uint64_t getWrites() const = 0;
|
||||
virtual uint32_t getNumberOfNodes() const = 0;
|
||||
virtual uint64_t getNumberOfData() const = 0;
|
||||
virtual ~IStatistics() {}
|
||||
}; // IStatistics
|
||||
|
||||
class SIDX_DLL ISpatialIndex
|
||||
{
|
||||
public:
|
||||
virtual void insertData(uint32_t len, const byte* pData, const IShape& shape, id_type shapeIdentifier) = 0;
|
||||
virtual bool deleteData(const IShape& shape, id_type shapeIdentifier) = 0;
|
||||
virtual void containsWhatQuery(const IShape& query, IVisitor& v) = 0;
|
||||
virtual void intersectsWithQuery(const IShape& query, IVisitor& v) = 0;
|
||||
virtual void pointLocationQuery(const Point& query, IVisitor& v) = 0;
|
||||
virtual void nearestNeighborQuery(uint32_t k, const IShape& query, IVisitor& v, INearestNeighborComparator& nnc) = 0;
|
||||
virtual void nearestNeighborQuery(uint32_t k, const IShape& query, IVisitor& v) = 0;
|
||||
virtual void selfJoinQuery(const IShape& s, IVisitor& v) = 0;
|
||||
virtual void queryStrategy(IQueryStrategy& qs) = 0;
|
||||
virtual void getIndexProperties(Tools::PropertySet& out) const = 0;
|
||||
virtual void addCommand(ICommand* in, CommandType ct) = 0;
|
||||
virtual bool isIndexValid() = 0;
|
||||
virtual void getStatistics(IStatistics** out) const = 0;
|
||||
virtual ~ISpatialIndex() {}
|
||||
|
||||
}; // ISpatialIndex
|
||||
|
||||
namespace StorageManager
|
||||
{
|
||||
SIDX_DLL enum StorageManagerConstants
|
||||
{
|
||||
EmptyPage = -0x1,
|
||||
NewPage = -0x1
|
||||
};
|
||||
|
||||
class SIDX_DLL IBuffer : public IStorageManager
|
||||
{
|
||||
public:
|
||||
virtual uint64_t getHits() = 0;
|
||||
virtual void clear() = 0;
|
||||
virtual ~IBuffer() {}
|
||||
}; // IBuffer
|
||||
|
||||
SIDX_DLL IStorageManager* returnMemoryStorageManager(Tools::PropertySet& in);
|
||||
SIDX_DLL IStorageManager* createNewMemoryStorageManager();
|
||||
|
||||
SIDX_DLL IStorageManager* returnDiskStorageManager(Tools::PropertySet& in);
|
||||
SIDX_DLL IStorageManager* createNewDiskStorageManager(std::string& baseName, uint32_t pageSize);
|
||||
SIDX_DLL IStorageManager* loadDiskStorageManager(std::string& baseName);
|
||||
|
||||
SIDX_DLL IBuffer* returnRandomEvictionsBuffer(IStorageManager& ind, Tools::PropertySet& in);
|
||||
SIDX_DLL IBuffer* createNewRandomEvictionsBuffer(IStorageManager& in, uint32_t capacity, bool bWriteThrough);
|
||||
}
|
||||
|
||||
//
|
||||
// Global functions
|
||||
//
|
||||
SIDX_DLL std::ostream& operator<<(std::ostream&, const ISpatialIndex&);
|
||||
SIDX_DLL std::ostream& operator<<(std::ostream&, const IStatistics&);
|
||||
}
|
||||
|
||||
#include "Point.h"
|
||||
#include "Region.h"
|
||||
#include "LineSegment.h"
|
||||
#include "TimePoint.h"
|
||||
#include "TimeRegion.h"
|
||||
#include "MovingPoint.h"
|
||||
#include "MovingRegion.h"
|
||||
#include "RTree.h"
|
||||
#include "MVRTree.h"
|
||||
#include "TPRTree.h"
|
||||
#include "Version.h"
|
||||
|
||||
|
||||
// typedef SpatialIndex::Tools::PoolPointer<Region> RegionPtr;
|
||||
// typedef SpatialIndex::Tools::PoolPointer<Point> PointPtr;
|
||||
// typedef SpatialIndex::Tools::PoolPointer<TimeRegion> TimeRegionPtr;
|
||||
// typedef SpatialIndex::Tools::PoolPointer<MovingRegion> MovingRegionPtr;
|
||||
Reference in New Issue
Block a user