ultimatepp/uppsrc/Core/Callback.h
cxl b3f0bc3000 Core: New lambda handling
git-svn-id: svn://ultimatepp.org/upp/trunk@7231 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2014-04-12 14:29:13 +00:00

50 lines
1.8 KiB
C++

enum _CNULL { CNULL };
template <class D, class S>
inline D brutal_cast(const S& source) { return *(D *)&source; }
#include "Cbgen.h"
#include "Callback0.h"
#include "Callback1.h"
#include "Callback2.h"
#include "Callback3.h"
#include "Callback4.h"
#define THISBACK(x) callback(this, &CLASSNAME::x)
#define THISBACK1(x, arg) callback1(this, &CLASSNAME::x, arg)
#define THISBACK2(m, a, b) callback2(this, &CLASSNAME::m, a, b)
#define THISBACK3(m, a, b, c) callback3(this, &CLASSNAME::m, a, b, c)
#define THISBACK4(m, a, b, c, d) callback4(this, &CLASSNAME::m, a, b, c, d)
#define PTEBACK(x) pteback(this, &CLASSNAME::x)
#define PTEBACK1(x, arg) pteback1(this, &CLASSNAME::x, arg)
#define PTEBACK2(m, a, b) pteback2(this, &CLASSNAME::m, a, b)
#define PTEBACK3(m, a, b, c) pteback3(this, &CLASSNAME::m, a, b, c)
#define PTEBACK4(m, a, b, c, d) pteback4(this, &CLASSNAME::m, a, b, c, d)
#define STDBACK(x) callback(&x)
#define STDBACK1(x, arg) callback1(&x, arg)
#define STDBACK2(m, a, b) callback2(&m, a, b)
#define STDBACK3(m, a, b, c) callback3(&m, a, b, c)
#define STDBACK4(m, a, b, c, d) callback4(&m, a, b, c, d)
template <class T>
class CallbackArgTarget
{
T result;
void SetResult(const T& value) { result = value; }
void Set(T value) { result = value; }
public:
typedef CallbackArgTarget CLASSNAME;
operator const T&() const { return result; }
bool IsNullInstance() const { return IsNull(result); }
Callback operator[](const T& value) { return THISBACK1(SetResult, value); }
operator Callback1<const T&>() { return THISBACK(SetResult); }
operator Callback1<T>() { return THISBACK(Set); }
CallbackArgTarget() { result = Null; }
};