#if !defined(_INLINE)
static char cvsid[] = "@(#)$Id: EnumeratedValues.cpp,v 1.4 1999/05/22 13:00:33 philogelos Exp $";
static char debugFileId[] = __FILE__;
#endif
#include "containers/EnumeratedValues.hpp"
#include "containers/FrozenValue.hpp"
#include "String.hpp"
#include "Debug.hpp"
#include "LinkManager.hpp"
EnumeratedValues::EnumeratedValues( ResettableEnumeration *anEnum )
{
preC_( anEnum != ( ResettableEnumeration * ) NIL );
valuesEnumeration = anEnum;
LinkManager::reg( this, valuesEnumeration );
}
EnumeratedValues::~EnumeratedValues()
{
LinkManager::free( this, valuesEnumeration );
}
PositionEnumeration *EnumeratedValues::getEnumeration() const
{
return new EnumeratedValues::FrozenValues
( ( Container * ) this,
getValueEnumeration() );
}
Enumeration *EnumeratedValues::getValueEnumeration() const
{
ResettableEnumeration *copy;
copy = TCAST( valuesEnumeration -> clone(), ResettableEnumeration );
copy -> reset();
return copy;
}
Top *EnumeratedValues::clone() const
{
return new EnumeratedValues( valuesEnumeration );
}
Top *EnumeratedValues::getValue( const Position * aPosition )
{
preC_( aPosition != null );
return( aPosition -> getValue() );
}
String EnumeratedValues::getClassName() const
{
return "EnumeratedValues";
}
EnumeratedValues::FrozenValues::FrozenValues( Container *aContainer,
Enumeration *anEnum )
{
preC_( anEnum != ( Enumeration * ) NIL );
preC_( aContainer != ( Container * ) NIL );
enumeration = anEnum;
LinkManager::reg( this, enumeration );
container = aContainer;
LinkManager::reg( this, container );
}
EnumeratedValues::FrozenValues::~FrozenValues()
{
LinkManager::free( this, container );
container = ( Container * ) NIL;
LinkManager::free( this, enumeration );
enumeration = ( Enumeration * ) NIL;
}
Position *EnumeratedValues::FrozenValues::getNextPosition()
{
return new FrozenValue( container, enumeration -> getNextElement() );
}
boolean EnumeratedValues::FrozenValues::hasMoreElements()
{
return ( enumeration -> hasMoreElements() );
}
String EnumeratedValues::FrozenValues::getClassName() const
{
return "FrozenValues";
}
#if defined(_INLINE)
#include "../src/Debug.ipp"
#endif