#ifndef __OBSERVABLEADAPTER_HPP__
#define __OBSERVABLEADAPTER_HPP__
#include "ObservationContext.hpp"
#include "Observable.hpp"
#include "Object.hpp"
#include "defines.h"
class List;
interface Condition;
class ObservableAdapter : public virtual Observable,
public virtual Object
{
public: ObservableAdapter();
public: virtual ~ObservableAdapter();
public: virtual void addPassive( PassiveObserver *anObserver );
public: virtual void addActive( ActiveObserver *anObserver );
public: virtual void removePassive( PassiveObserver *anObserver );
public: virtual void removeActive( ActiveObserver *anObserver );
public: virtual void addClassPassive( PassiveObserver *anObserver );
public: virtual void addClassActive( ActiveObserver *anObserver );
public: virtual void removeClassPassive( PassiveObserver *anObserver );
public: virtual void removeClassActive( ActiveObserver *anObserver );
public: virtual boolean fire( Condition *aCondition,
ObservationContext *aContext );
protected: Index strip( List *aList, Top *anObject );
public: virtual boolean equals( const Top *anOther ) const;
public: virtual Top *clone() const;
public: virtual String toString() const;
public: virtual String getString() const;
public: virtual String getClassName() const;
#if defined( TESTING )
boolean tester( int aParam ) const NOTHROWS;
#endif
protected: virtual List *getPassives();
protected: virtual List *getActives();
protected: virtual List *getClassPassives();
protected: virtual List *getClassActives();
protected: virtual boolean fireOnList( List *aList,
Condition *aCondition,
ObservationContext *aContext );
protected: List *passiveObservers;
protected: List *activeObservers;
protected: static List *classPassiveObservers;
protected: static List *classActiveObservers;
#if defined( USE_PER_CLASS_NEW )
public: void *operator new( size_t size );
#endif
};
#endif