#include "Bilder.h"

// Inhalt der Bilder Klasse aus Bilder.h
// Konstruktor
Bilder::Bilder()
{
	next = 0;
	name = new Text( "" );
	bild = 0;
}

// Destruktor
Bilder::~Bilder()
{
	if( bild )
		bild->release();
	name->release();
	delete (Bilder*)next;
}

// nicht constant
bool Bilder::add( const char *name, Bild *bild )
{
	if( this->name->istGleich( name ) )
	{
		bild->release();
		return 0;
	}
	if( !this->bild )
	{
		this->name->setText( name );
		this->bild = bild;
		return 1;
	}
	if( !next )
		next = new Bilder();
	return next->add( name, bild );
}

bool Bilder::set( const char *name, Bild *bild )
{
	if( this->name->istGleich( name ) )
	{
		this->bild->release();
		this->bild = bild;
		return 1;
	}
	if( !next )
	{
		bild->release();
		return 0;
	}
	return next->set( name, bild );
}

bool Bilder::lösche( const char *name )
{
	if( this->name->istGleich( name ) )
	{
		this->bild->release();
		this->bild = next->zThis();
		this->name->setText( ((Bilder*)next)->name );
		BilderV *tmp = next->zNext();
		next->setNext( 0 );
		next->release();
		next = tmp;
		return 1;
	}
	if( !next )
		return 0;
	return next->lösche( name );
}

void Bilder::setNext( BilderV *next )
{
	this->next = next;
}

void Bilder::deleteAll()
{
	bild = bild->release();
	name->setText( "" );
	next->release();
	next = 0;
}

void Bilder::release()
{
	delete this;
}

// constant
Bild *Bilder::get( const char *name ) const
{
	if( this->name->istGleich( name ) )
		return bild ? bild->getThis() : 0;
	if( !next )
		return 0;
	return next->get( name );
}

Bild *Bilder::z( const char *name ) const
{
	if( this->name->istGleich( name ) )
		return bild;
	if( !next )
		return 0;
	return next->get( name );
}

Bild *Bilder::zThis() const
{
	return bild;
}

BilderV *Bilder::zNext() const
{
	return next;
}

char *Bilder::getName() const
{
	return name->getText();
}