Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef DELEGATE_H
- #define DELEGATE_H
- #include <iostream>
- template<typename Signature>
- class delegate;
- class delegate_base
- {
- protected:
- delegate_base()
- : m_ptr(0),
- m_proc(0),
- m_procWrapper(0)
- {}
- // Copying
- delegate_base(const delegate_base& other)
- : m_ptr(other.m_ptr),
- m_proc(other.m_proc),
- m_procWrapper(other.m_procWrapper)
- {}
- delegate_base& operator=(const delegate_base& rhs)
- {
- delegate_base(rhs).swap(*this);
- return *this;
- }
- ~delegate_base() {}
- void swap(delegate_base& other) throw()
- {
- std::swap(m_ptr, other.m_ptr);
- std::swap(m_proc, other.m_proc);
- std::swap(m_procWrapper, other.m_procWrapper);
- }
- public:
- void dump() const
- {
- uintptr_t *tmp = reinterpret_cast<uintptr_t*>(m_proc);
- std::cout << "-> dump" << std::endl
- << " proc = " << m_proc << ", *proc = 0x" << std::hex << *tmp << std::endl;
- }
- void reset()
- {
- delegate_base().swap(*this);
- }
- operator bool()
- {
- return (m_proc && m_procWrapper);
- }
- protected:
- void *m_ptr;
- void *m_proc;
- void *m_procWrapper;
- };
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 0 arg(s)
- #define DELEGATE_COMMA
- #define DELEGATE_TEMPLATE_ARGS
- #define DELEGATE_ARG_TYPES
- #define DELEGATE_PROC_ARGS
- #define DELEGATE_ARGS
- #include "delegate_impl.i"
- // 1 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0
- #define DELEGATE_ARG_TYPES A0
- #define DELEGATE_PROC_ARGS A0 a0
- #define DELEGATE_ARGS a0
- #include "delegate_impl.i"
- // 2 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0, typename A1
- #define DELEGATE_ARG_TYPES A0, A1
- #define DELEGATE_PROC_ARGS A0 a0, A1 a1
- #define DELEGATE_ARGS a0, a1
- #include "delegate_impl.i"
- // 3 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0, typename A1, typename A2
- #define DELEGATE_ARG_TYPES A0, A1, A2
- #define DELEGATE_PROC_ARGS A0 a0, A1 a1, A2 a2
- #define DELEGATE_ARGS a0, a1, a2
- #include "delegate_impl.i"
- // 4 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0, typename A1, typename A2, typename A3
- #define DELEGATE_ARG_TYPES A0, A1, A2, A3
- #define DELEGATE_PROC_ARGS A0 a0, A1 a1, A2 a2, A3 a3
- #define DELEGATE_ARGS a0, a1, a2, a3
- #include "delegate_impl.i"
- // 5 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0, typename A1, typename A2, typename A3, typename A4
- #define DELEGATE_ARG_TYPES A0, A1, A2, A3, A4
- #define DELEGATE_PROC_ARGS A0 a0, A1 a1, A2 a2, A3 a3, A4 a4
- #define DELEGATE_ARGS a0, a1, a2, a3, a4
- #include "delegate_impl.i"
- // 6 arg(s)
- #define DELEGATE_COMMA ,
- #define DELEGATE_TEMPLATE_ARGS typename A0, typename A1, typename A2, typename A3, typename A4, typename A5
- #define DELEGATE_ARG_TYPES A0, A1, A2, A3, A4, A5
- #define DELEGATE_PROC_ARGS A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5
- #define DELEGATE_ARGS a0, a1, a2, a3, a4, a5
- #include "delegate_impl.i"
- #endif // DELEGATE_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement