ultimatepp/uppsrc/Core/Callback.cpp
rylek 85f4abea96 +Core: additional callback variants thanks to kohait00
git-svn-id: svn://ultimatepp.org/upp/trunk@3398 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2011-05-02 23:05:13 +00:00

83 lines
1 KiB
C++

#include "Core.h"
NAMESPACE_UPP
void Callback::Execute() const
{
if(action) action->Execute();
}
Callback& Callback::operator=(const Callback& c)
{
c.Retain();
Release();
action = c.action;
return *this;
}
Callback::Callback(const Callback& c)
{
action = c.action;
Retain();
}
Callback::~Callback()
{
Release();
}
Callback callback(Callback cb1, Callback cb2)
{
return Callback(new CallbackForkAction (cb1, cb2));
}
Callback& operator<<(Callback& a, Callback b)
{
if(a)
a = callback(a, b);
else
a = b;
return a;
}
//
bool Gate::Execute() const
{
return (void *)action == (void *)1 ? true : action ? action->Execute() : false;
}
Gate& Gate::operator=(const Gate& c)
{
c.Retain();
Release();
action = c.action;
return *this;
}
Gate::Gate(const Gate& c)
{
action = c.action;
Retain();
}
Gate::~Gate()
{
Release();
}
Gate callback(Gate cb1, Gate cb2)
{
return Gate(new GateForkAction (cb1, cb2));
}
Gate& operator<<(Gate& a, Gate b)
{
if(a)
a = callback(a, b);
else
a = b;
return a;
}
END_UPP_NAMESPACE