All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ICallback.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 
6 namespace Eegeo
7 {
8  namespace Helpers
9  {
10  class ICallback0
11  {
12  public:
13  virtual ~ICallback0() {}
14  virtual void operator()() const = 0;
15  };
16 
17  template <typename TCallbackContext>
18  class TCallback0 : public ICallback0
19  {
20  public:
21  typedef void (TCallbackContext::*TCallTarget)();
22 
23  TCallback0(TCallbackContext* context, TCallTarget callback)
24  : m_callback(callback)
25  , m_pContext(context)
26  {
27  }
28 
29  virtual void operator()() const
30  {
31  (*m_pContext.*m_callback)();
32  }
33  private:
34  TCallTarget m_callback;
35  TCallbackContext* m_pContext;
36  };
37 
38  template <typename T>
39  class ICallback1
40  {
41  public:
42  virtual ~ICallback1() {}
43  virtual void operator()(T& item) const = 0;
44  };
45 
46  template <typename TCallbackContext, typename TItem>
47  class TCallback1 : public ICallback1<TItem>
48  {
49  public:
50  typedef void (TCallbackContext::*TCallTarget)(TItem& item);
51 
52  TCallback1(TCallbackContext* context, TCallTarget callback)
53  : m_callback(callback)
54  , m_pContext(context)
55  {
56  }
57 
58  virtual ~TCallback1() { }
59 
60  virtual void operator()(TItem& item) const
61  {
62  (*m_pContext.*m_callback)(item);
63  }
64  private:
65  TCallTarget m_callback;
66  TCallbackContext* m_pContext;
67  };
68 
69  template <typename TItem1, typename TItem2>
70  class ICallback2
71  {
72  public:
73  virtual ~ICallback2() {}
74  virtual void operator()(TItem1& item1, TItem2& item2) const = 0;
75  };
76 
77  template <typename TCallbackContext, typename TItem1, typename TItem2>
78  class TCallback2 : public ICallback2<TItem1, TItem2>
79  {
80  public:
81  typedef void (TCallbackContext::*TCallTarget)(TItem1& item1, TItem2& item2);
82 
83  TCallback2(TCallbackContext* context, TCallTarget callback)
84  : m_callback(callback)
85  , m_pContext(context)
86  {
87  }
88 
89  virtual ~TCallback2() { }
90 
91  virtual void operator()(TItem1& item1, TItem2& item2) const
92  {
93  (*m_pContext.*m_callback)(item1, item2);
94  }
95  private:
96  TCallTarget m_callback;
97  TCallbackContext* m_pContext;
98  };
99 
100  template <typename TItem1, typename TItem2, typename TItem3>
102  {
103  public:
104  virtual ~ICallback3() {}
105  virtual void operator()(TItem1& item1, TItem2& item2, TItem3& item3) const = 0;
106  };
107 
108  template <typename TCallbackContext, typename TItem1, typename TItem2, typename TItem3>
109  class TCallback3 : public ICallback3<TItem1, TItem2, TItem3>
110  {
111  public:
112  typedef void (TCallbackContext::*TCallTarget)(TItem1& item1, TItem2& item2, TItem3& item3);
113 
114  TCallback3(TCallbackContext* context, TCallTarget callback)
115  : m_callback(callback)
116  , m_pContext(context)
117  {
118  }
119 
120  virtual ~TCallback3() { }
121 
122  virtual void operator()(TItem1& item1, TItem2& item2, TItem3& item3) const
123  {
124  (*m_pContext.*m_callback)(item1, item2, item3);
125  }
126  private:
127  TCallTarget m_callback;
128  TCallbackContext* m_pContext;
129  };
130 
131  }
132 }