38 lines
719 B
C++
38 lines
719 B
C++
#pragma once
|
|
|
|
//#include <vector>
|
|
#include <algorithm>
|
|
|
|
namespace rp {
|
|
namespace mixin {
|
|
|
|
class observable
|
|
{
|
|
public:
|
|
virtual ~observable() {}
|
|
virtual void update() = 0;
|
|
};
|
|
|
|
class subjectable
|
|
{
|
|
public:
|
|
subjectable() {}
|
|
virtual ~subjectable() {}
|
|
virtual void attach( observable* observer )
|
|
{
|
|
m_observers.push_back( observer );
|
|
}
|
|
virtual void detach( observable* observer )
|
|
{
|
|
m_observers.erase( std::remove( m_observers.begin(), m_observers.end(), observer ), m_observers.end() );
|
|
}
|
|
virtual void notify()
|
|
{
|
|
std::for_each( m_observers.begin(), m_observers.end(), std::mem_fun( &observable::update ) );
|
|
}
|
|
private:
|
|
std::vector< observable* > m_observers;
|
|
};
|
|
|
|
} // mixin
|
|
} // rp
|