#ifndef __RANGEDCONTAINER_HPP__
#define __RANGEDCONTAINER_HPP__
#include "IndexableContainer.hpp"
#include "MutablePosition.hpp"
#include "PositionAdapter.hpp"
#include "MutablePositionAdapter.hpp"
#include "Map.hpp"
#include "defines.h"
class RangedContainerEnumeration;
abstract class RangedContainer : public virtual IndexableContainer
{
public: virtual Index getLowBound() const = 0;
public: virtual Index getHighBound() const = 0;
public: virtual boolean isValidIndex( const Index anIndex ) const;
public: virtual RangedContainerEnumeration *getRangedEnumeration() const;
public: virtual Index findIndex( const Top *anObject ) const;
public: virtual IndexPosition *getFirstPosition() const;
public: virtual IndexPosition *getLastPosition() const;
public: virtual MutablePosition *getAlwaysFirstPosition() const;
public: virtual MutablePosition *getAlwaysLastPosition() const;
public: virtual PositionEnumeration *getEnumeration() const;
public: virtual MutablePositionEnumeration *getMutableEnumeration() const;
public: virtual Index getCardinality() const;
public: class BeyondRange : public InvalidIndex
{
public: BeyondRange( String aMessage, const Top *const aSource );
public: virtual String getDescription() const;
public: virtual String getClassName() const;
};
public: class AfterLast : public BeyondRange
{
public: AfterLast( String aMessage, const Top *const aSource );
public: virtual String getDescription() const;
public: virtual String getClassName() const;
};
public: class BeforeFirst : public BeyondRange
{
public: BeforeFirst( String aMessage, const Top *const aSource );
public: virtual String getDescription() const;
public: virtual String getClassName() const;
};
public: abstract class RContainerFirstPosition : public MutablePositionAdapter,
public virtual Object
{
public: RContainerFirstPosition( const RangedContainer *aContainer );
public: ~RContainerFirstPosition();
public: virtual Top *setValue( Top *aNewValue );
public: virtual boolean isValid () const;
public: virtual Top *getValue() const;
};
public: abstract class RContainerLastPosition : public MutablePositionAdapter,
public virtual Object
{
public: RContainerLastPosition( const RangedContainer *aContainer );
public: ~RContainerLastPosition();
public: virtual Top *setValue( Top *aNewValue );
public: virtual boolean isValid () const;
public: virtual Top *getValue() const;
};
};
#endif