00aa150b32
git-svn-id: svn://10.65.10.50/trunk@11845 c028cbd2-c16b-5b4b-a496-9718f37d4682
83 lines
1.4 KiB
C++
Executable File
83 lines
1.4 KiB
C++
Executable File
#include <spies.h>
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TSpy_target
|
|
///////////////////////////////////////////////////////////
|
|
|
|
void TSpy_target::notify(TSpy_message msg, void* pJolly)
|
|
{
|
|
for (int i = _spies.last(); i >= 0; i = _spies.pred(i))
|
|
{
|
|
TSpy* spy = (TSpy*)_spies.objptr(i);
|
|
spy->notify(msg, pJolly);
|
|
}
|
|
}
|
|
|
|
bool TSpy_target::add_spy(TSpy* spy)
|
|
{
|
|
#ifdef DBG
|
|
for (int i = _spies.last(); i >= 0; i--)
|
|
{
|
|
TSpy* s = (TSpy*)_spies.objptr(i);
|
|
if (s == spy)
|
|
{
|
|
NFCHECK("Double spy");
|
|
return FALSE;
|
|
}
|
|
}
|
|
#endif
|
|
_spies.add(spy);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TSpy_target::kill_spy(const TSpy* spy)
|
|
{
|
|
int i;
|
|
for (i = _spies.last(); i >= 0; i--)
|
|
{
|
|
TSpy* s = (TSpy*)_spies.objptr(i);
|
|
if (s == spy)
|
|
{
|
|
_spies.destroy(i, TRUE);
|
|
break;
|
|
}
|
|
}
|
|
#ifdef DBG
|
|
if (i < 0)
|
|
NFCHECK("Spy not found");
|
|
#endif
|
|
return i >= 0;
|
|
}
|
|
|
|
TSpy_target::~TSpy_target()
|
|
{
|
|
notify(spy_delete, NULL);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TSpy
|
|
///////////////////////////////////////////////////////////
|
|
|
|
void TSpy::spy(TSpy_target* t)
|
|
{
|
|
if (_target)
|
|
_target->kill_spy(this);
|
|
_target = t;
|
|
if (_target)
|
|
_target->add_spy(this);
|
|
}
|
|
|
|
void TSpy::notify(TSpy_message msg, void* pJolly)
|
|
{
|
|
CHECK (_target, "Unemployed spy notified");
|
|
if (_notify)
|
|
_notify(*this, msg, pJolly);
|
|
if (msg == spy_delete)
|
|
spy(NULL);
|
|
}
|
|
|
|
TSpy::~TSpy()
|
|
{
|
|
spy(NULL);
|
|
}
|