/*
 * HnSRTreeInfo.hh
 *
 * DO NOT EDIT THIS FILE!
 *
 * This file is automatically generated by obj2ptr.
 * 2002/09/13 14:07:13
 */

#ifndef _HnSRTreeInfo_hh
#define _HnSRTreeInfo_hh

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

#include "HnSRTree/HnPointer.hh"

#include "HnSRTree/HnBlockStream.hh"

/*
 * HnSRTreeInfo
 */

class _HNSRTIMP HnSRTreeInfo: public HnPointer {
private:
    friend class HnSRTreeInfoObj;
    HnSRTreeInfo(const HnSRTreeInfoObj *ptr) {
	HnPointer::assign((HnObject *)ptr);
    }
    HnSRTreeInfoObj *getObject(void) const {
	return (HnSRTreeInfoObj *)HnPointer::getObject();
    }
public:
    static const HnSRTreeInfo null;
    HnSRTreeInfo(void) {}
public:
    enum StaticAlgorithm {
	NONSTATIC       = 0,
        VAM_ORIGINAL    = 1,
	VAM_CORRECTED   = 2
    };
    enum NonLeafFloatType {
        NON_LEAF_SINGLE = 0,
	NON_LEAF_DOUBLE = 1
    };
    enum NeighborAlgorithm {
        DEPTH_FIRST     = 0,
        BREADTH_FIRST   = 1
    };

    _HNSRTIMP friend HnSRTreeInfo
    new_HnSRTreeInfo(HnBlockStream blockStream);
    _HNSRTIMP friend HnSRTreeInfo
    new_HnSRTreeInfo(int dimension, int dataItemSize,
		    long fileSize, long freeOffset, long rootOffset,
		    int height,
		    int blockSize, int splitFactor, int reinsertFactor,
		    HnSRTreeInfo::StaticAlgorithm staticAlgorithm,
		    HnSRTreeInfo::NonLeafFloatType nonLeafFloatType,
		    HnSRTreeInfo::NeighborAlgorithm neighborAlgorithm);

    /* get attributes */
    int getDimension(void) const;
    int getDataItemSize(void) const;

    long getFileSize(void) const;
    long getFreeOffset(void) const;
    long getRootOffset(void) const;
    int getHeight(void) const;

    int getBlockSize(void) const;
    int getSplitFactor(void) const;
    int getReinsertFactor(void) const;
    HnSRTreeInfo::StaticAlgorithm getStaticAlgorithm(void) const;
    HnSRTreeInfo::NonLeafFloatType getNonLeafFloatType(void) const;

    HnSRTreeInfo::NeighborAlgorithm getNeighborAlgorithm(void) const;

    /* set attributes */
    void setFileSize(long fileSize);
    void setFreeOffset(long freeOffset);
    void setRootOffset(long rootOffset);
    void setHeight(int height);

    void setNeighborAlgorithm(HnSRTreeInfo::NeighborAlgorithm
			      neighborAlgorithm);

    void writeTo(HnBlockStream blockStream) const;
    HnBlockStream toBlockStream(void) const;
    static int getBlockStreamSize(void);
};

#include "HnSRTree/HnString.hh"

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

#include "HnSRTree/HnSRTreeInfoObj.hh"

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

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

inline long
HnSRTreeInfo::getFileSize(void) const
{
    return getObject()->getFileSize();
}

inline long
HnSRTreeInfo::getFreeOffset(void) const
{
    return getObject()->getFreeOffset();
}

inline long
HnSRTreeInfo::getRootOffset(void) const
{
    return getObject()->getRootOffset();
}

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

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

inline int
HnSRTreeInfo::getSplitFactor(void) const
{
    return getObject()->getSplitFactor();
}

inline int
HnSRTreeInfo::getReinsertFactor(void) const
{
    return getObject()->getReinsertFactor();
}

inline HnSRTreeInfo::StaticAlgorithm
HnSRTreeInfo::getStaticAlgorithm(void) const
{
    return getObject()->getStaticAlgorithm();
}

inline HnSRTreeInfo::NonLeafFloatType
HnSRTreeInfo::getNonLeafFloatType(void) const
{
    return getObject()->getNonLeafFloatType();
}

inline HnSRTreeInfo::NeighborAlgorithm
HnSRTreeInfo::getNeighborAlgorithm(void) const
{
    return getObject()->getNeighborAlgorithm();
}

inline void
HnSRTreeInfo::setFileSize(long fileSize)
{
    getObject()->setFileSize(fileSize);
}

inline void
HnSRTreeInfo::setFreeOffset(long freeOffset)
{
    getObject()->setFreeOffset(freeOffset);
}

inline void
HnSRTreeInfo::setRootOffset(long rootOffset)
{
    getObject()->setRootOffset(rootOffset);
}

inline void
HnSRTreeInfo::setHeight(int height)
{
    getObject()->setHeight(height);
}

inline void
HnSRTreeInfo::setNeighborAlgorithm(HnSRTreeInfo::NeighborAlgorithm			      neighborAlgorithm)
{
    getObject()->setNeighborAlgorithm(neighborAlgorithm);
}

inline void
HnSRTreeInfo::writeTo(HnBlockStream blockStream) const
{
    getObject()->writeTo(blockStream);
}

inline HnBlockStream
HnSRTreeInfo::toBlockStream(void) const
{
    return getObject()->toBlockStream();
}

inline int
HnSRTreeInfo::getBlockStreamSize(void)
{
    return HnSRTreeInfoObj::getBlockStreamSize();
}


#endif /* _HnSRTreeInfo_hh */
