#include "CTB.hxx"
#include "CTBprintf.hxx"
#include "CTBsignal.hxx"
class sub {
public:
sub();
void Set_i(int i);
int Get_i() const;
CTBsignalEmitter SEnew;
private:
int m_i;
};
class obs {
public:
obs();
CTBsignalReceiver<obs,sub> SRnew;
void New(sub* p_sub, CTBuint32 i_mask);
};
sub::sub() : m_i(0) {}
void sub::Set_i(int i) { m_i = i; SEnew(0x0001); }
int sub::Get_i() const { return m_i; }
obs::obs() : SRnew(this, &obs::New) {}
void obs::New(sub* p_sub, CTBuint32 i_mask)
{
cout << "New called: p = " << p_sub << " mask = " << i_mask;
if (i_mask) cout << " i = " << p_sub->Get_i();
cout << endl;
}
int main(int, char*)
{
sub* p_s = new sub;
obs* p_o1 = new obs;
obs* p_o2 = new obs;
p_s->Set_i(17);
p_o1->SRnew.Connect(p_s->SEnew, p_s);
p_s->Set_i(18);
p_o2->SRnew.Connect(p_s->SEnew, p_s);
p_s->Set_i(19);
delete p_o1;
p_s->Set_i(20);
delete p_s;
delete p_o2;
return 0;
}