/*
 * HnSRTreeFile.hh
 *
 * DO NOT EDIT THIS FILE!
 *
 * This file is automatically generated by obj2ptr.
 * 2006/08/03 17:37:45
 */

#ifndef _HnSRTreeFile_hh
#define _HnSRTreeFile_hh

#ifndef _HNSRTIMP
#ifdef _MSC_VER
#define _HNSRTIMP _declspec(dllimport)
#else
#define _HNSRTIMP
#endif
#endif

#include "HnSRTree/HnPointer.hh"

#include "HnSRTree/HnPoint.hh"
#include "HnSRTree/HnDataItem.hh"
#include "HnSRTree/HnProperties.hh"
#include "HnSRTree/HnSphere.hh"
#include "HnSRTree/HnRect.hh"
#include "HnSRTree/HnSRTreeProto.h"
#include "HnSRTree/HnSRTreeProfileSt.h"

/*
 * HnSRTreeFile
 */

class HnSRTreeFileObj;

class _HNSRTIMP HnSRTreeFile: public HnPointer {
private:
    friend class HnSRTreeFileObj;
    HnSRTreeFile(const HnSRTreeFileObj *ptr) {
	HnPointer::assign((HnObject *)ptr);
    }
    HnSRTreeFileObj *getObject(void) const {
	return (HnSRTreeFileObj *)HnPointer::getObject();
    }
public:
    static const HnSRTreeFile null;
    HnSRTreeFile(void) {}
public:
    _HNSRTIMP friend HnSRTreeFile
    new_HnSRTreeFile(const char *path, int dimension, int dataItemSize,
		    const HnProperties &properites = HnProperties::null);
    _HNSRTIMP friend HnSRTreeFile
    new_HnSRTreeFile(const char *path,
		    int dimension, int dataItemSize, 
		    HnPointVector &points, HnDataItemVector &dataItems,
		    const HnProperties &properties = HnProperties::null);
    _HNSRTIMP friend HnSRTreeFile
    new_HnSRTreeFile(const char *path, const char *mode);

    int getDimension(void) const;
    int getDataItemSize(void) const;
    int getHeight(void) const;
    int getBlockSize(void) const;

    void store(const HnPoint &point, const HnDataItem &dataItem);
    void remove(const HnPoint &point, const HnDataItem &dataItem);
    void close(void);

    void getFirst(HnPoint *point_return, HnDataItem *dataItem_return);
    void getFirst(const HnRect &rect,
		  HnPoint *point_return, HnDataItem *dataItem_return);
    void getFirst(const HnSphere &sphere,
		  HnPoint *point_return, HnDataItem *dataItem_return);
    void getNext(HnPoint *point_return, HnDataItem *dataItem_return);
    void getInRect(const HnRect &rect,
		   HnPointVector *points_return,
		   HnDataItemVector *dataItems_return);
    void getInSphere(const HnSphere &sphere,
		     HnPointVector *points_return,
		     HnDataItemVector *dataItems_return);

    void getNeighbors(const HnPoint &point, int maxCount,
		      HnPointVector *points_return,
		      HnDataItemVector *dataItems_return);
    void getColoredNeighbors(const HnPointVector &queryPoints, int maxCount,
			     HnPointVector *points_return,
			     HnDataItemVector *dataItems_return);
    void getColoredNeighbors(const HnPointVector &queryPoints, int maxCount,
			     HnPointVector *points_return,
			     HnDataItemVector *dataItems_return,
			     HnSRTreeCompColorsFunc *compColorsFunc);

    void check(void);
    void print(HnBool verbose);

    void resetProfile(void);
    void copyProfileInto(HnSRTreeProfileSt *profile);

    HnBool dumpToFile(const char *fileName);
    HnBool dumpToFileStream(FILE *fp);

    /* properties */
    HnProperties getDefaultProperties(void) const;
    HnProperties getProperties(void) const;
    void setProperties(const HnProperties &properties);

    static void setDebug(HnBool debug);
};

    _HNSRTIMP HnSRTreeFile
    new_HnSRTreeFile(const char *path, int dimension, int dataItemSize,
		    const HnProperties &properites /*=HnProperties::null*/);
    _HNSRTIMP HnSRTreeFile
    new_HnSRTreeFile(const char *path,
		    int dimension, int dataItemSize, 
		    HnPointVector &points, HnDataItemVector &dataItems,
		    const HnProperties &properties /*=HnProperties::null*/);
    _HNSRTIMP HnSRTreeFile
    new_HnSRTreeFile(const char *path, const char *mode);

#include "HnSRTree/HnString.hh"

#define HnClass HnSRTreeFile
#include "HnSRTree/HnClassArray.hh"

#include "HnSRTree/HnSRTreeFileObj.hh"

inline int
HnSRTreeFile::getDimension(void) const
{
    return getObject()->getDimension();
}

inline int
HnSRTreeFile::getDataItemSize(void) const
{
    return getObject()->getDataItemSize();
}

inline int
HnSRTreeFile::getHeight(void) const
{
    return getObject()->getHeight();
}

inline int
HnSRTreeFile::getBlockSize(void) const
{
    return getObject()->getBlockSize();
}

inline void
HnSRTreeFile::store(const HnPoint &point, const HnDataItem &dataItem)
{
    getObject()->store(point, dataItem);
}

inline void
HnSRTreeFile::remove(const HnPoint &point, const HnDataItem &dataItem)
{
    getObject()->remove(point, dataItem);
}

inline void
HnSRTreeFile::close(void)
{
    getObject()->close();
}

inline void
HnSRTreeFile::getFirst(HnPoint *point_return, HnDataItem *dataItem_return)
{
    getObject()->getFirst(point_return, dataItem_return);
}

inline void
HnSRTreeFile::getFirst(const HnRect &rect, HnPoint *point_return, HnDataItem *dataItem_return)
{
    getObject()->getFirst(rect, point_return, dataItem_return);
}

inline void
HnSRTreeFile::getFirst(const HnSphere &sphere, HnPoint *point_return, HnDataItem *dataItem_return)
{
    getObject()->getFirst(sphere, point_return, dataItem_return);
}

inline void
HnSRTreeFile::getNext(HnPoint *point_return, HnDataItem *dataItem_return)
{
    getObject()->getNext(point_return, dataItem_return);
}

inline void
HnSRTreeFile::getInRect(const HnRect &rect, HnPointVector *points_return, HnDataItemVector *dataItems_return)
{
    getObject()->getInRect(rect, points_return, dataItems_return);
}

inline void
HnSRTreeFile::getInSphere(const HnSphere &sphere, HnPointVector *points_return, HnDataItemVector *dataItems_return)
{
    getObject()->getInSphere(sphere, points_return, dataItems_return);
}

inline void
HnSRTreeFile::getNeighbors(const HnPoint &point, int maxCount, HnPointVector *points_return, HnDataItemVector *dataItems_return)
{
    getObject()->getNeighbors(point, maxCount, points_return, dataItems_return);
}

inline void
HnSRTreeFile::getColoredNeighbors(const HnPointVector &queryPoints, int maxCount, HnPointVector *points_return, HnDataItemVector *dataItems_return)
{
    getObject()->getColoredNeighbors(queryPoints, maxCount, points_return, dataItems_return);
}

inline void
HnSRTreeFile::getColoredNeighbors(const HnPointVector &queryPoints, int maxCount, HnPointVector *points_return, HnDataItemVector *dataItems_return, HnSRTreeCompColorsFunc *compColorsFunc)
{
    getObject()->getColoredNeighbors(queryPoints, maxCount, points_return, dataItems_return, compColorsFunc);
}

inline void
HnSRTreeFile::check(void)
{
    getObject()->check();
}

inline void
HnSRTreeFile::print(HnBool verbose)
{
    getObject()->print(verbose);
}

inline void
HnSRTreeFile::resetProfile(void)
{
    getObject()->resetProfile();
}

inline void
HnSRTreeFile::copyProfileInto(HnSRTreeProfileSt *profile)
{
    getObject()->copyProfileInto(profile);
}

inline HnBool
HnSRTreeFile::dumpToFile(const char *fileName)
{
    return getObject()->dumpToFile(fileName);
}

inline HnBool
HnSRTreeFile::dumpToFileStream(FILE *fp)
{
    return getObject()->dumpToFileStream(fp);
}

inline HnProperties
HnSRTreeFile::getDefaultProperties(void) const
{
    return getObject()->getDefaultProperties();
}

inline HnProperties
HnSRTreeFile::getProperties(void) const
{
    return getObject()->getProperties();
}

inline void
HnSRTreeFile::setProperties(const HnProperties &properties)
{
    getObject()->setProperties(properties);
}

inline void
HnSRTreeFile::setDebug(HnBool debug)
{
    HnSRTreeFileObj::setDebug(debug);
}


#endif /* _HnSRTreeFile_hh */
