#if !defined(_INLINE)
static char cvsid[] = "@(#)$Id: LayeredContainer.cpp,v 1.3 1999/05/22 13:00:34 philogelos Exp $";
static char debugFileId[] = __FILE__;
#endif
#include "containers/LayeredContainer.hpp"
#include "containers/LayeredPosition.hpp"
#include "LinkManager.hpp"
#include "OGuard.hpp"
#include "Debug.hpp"
PositionEnumeration *LayeredContainer::getEnumeration() const
{
return new LayeredEnumeration( ( LayeredContainer * ) this );
}
boolean LayeredContainer::isEmpty() const
{
preC_( getBaseContainer() != ( Container * ) NIL );
return( getBaseContainer() -> isEmpty() );
}
Index LayeredContainer::getCardinality() const
{
preC_( getBaseContainer() != ( Container * ) NIL );
return( getBaseContainer() -> getCardinality() );
}
Top *LayeredContainer::getValue( const Position *aPosition )
{
OGuard _position( aPosition, this );
preC_( aPosition != ( const Position * ) NULL );
return( aPosition -> getValue() );
}
Position *LayeredContainer::createFromBase( Position *aBasePosition )
{
OGuard _position( aBasePosition, this );
preC_( aBasePosition != ( const Position * ) NULL );
preC_( getBaseContainer() -> isValid( aBasePosition ) );
return new LayeredPosition( this, aBasePosition );
}
LayeredEnumeration::LayeredEnumeration( LayeredContainer *aContainer )
{
preC_( aContainer != ( Container * ) NIL );
baseContainer = aContainer;
LinkManager::reg( this, baseContainer );
baseEnum = aContainer -> getBaseContainer() -> getEnumeration();
LinkManager::reg( this, baseEnum );
test_( baseEnum != ( PositionEnumeration * ) NIL );
}
LayeredEnumeration::~LayeredEnumeration()
{
LinkManager::free( this, baseEnum );
LinkManager::free( this, baseContainer );
}
Position *LayeredEnumeration::getNextPosition()
{
return( baseContainer -> createFromBase
( baseEnum -> getNextPosition() ) );
}
boolean LayeredEnumeration::hasMoreElements()
{
return( baseEnum -> hasMoreElements() );
}
#if defined(_INLINE)
#include "../src/Debug.ipp"
#endif