MyGUI  3.2.1
MyGUI_Delegate.h
Go to the documentation of this file.
00001 /*
00002  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
00003  * Distributed under the MIT License
00004  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
00005  */
00006 
00007 #ifndef __MYGUI_DELEGATE_H__
00008 #define __MYGUI_DELEGATE_H__
00009 
00010 #include "MyGUI_Diagnostic.h"
00011 #include <list>
00012 
00013 #include <typeinfo>
00014 
00015 // source
00016 // http://rsdn.ru/article/cpp/delegates.xml
00017 
00018 // генерация делегатов для различного колличества параметров
00019 namespace MyGUI
00020 {
00021 
00022     namespace delegates
00023     {
00024         // базовый класс для тех классов, что хотят себя отвязывать от мульти делегатов
00025         class MYGUI_EXPORT IDelegateUnlink
00026         {
00027         public:
00028             virtual ~IDelegateUnlink() { }
00029 
00030             IDelegateUnlink()
00031             {
00032                 m_baseDelegateUnlink = this;
00033             }
00034             bool compare(IDelegateUnlink* _unlink) const
00035             {
00036                 return m_baseDelegateUnlink == _unlink->m_baseDelegateUnlink;
00037             }
00038 
00039         private:
00040             IDelegateUnlink* m_baseDelegateUnlink;
00041         };
00042 
00043         inline IDelegateUnlink* GetDelegateUnlink(void* _base)
00044         {
00045             return 0;
00046         }
00047         inline IDelegateUnlink* GetDelegateUnlink(IDelegateUnlink* _base)
00048         {
00049             return _base;
00050         }
00051     }
00052 
00053 // no parameters
00054 #define MYGUI_SUFFIX       0
00055 #define MYGUI_TEMPLATE
00056 #define MYGUI_TEMPLATE_PARAMS
00057 #define MYGUI_TEMPLATE_ARGS
00058 #define MYGUI_T_TEMPLATE_PARAMS  <typename T>
00059 #define MYGUI_T_TEMPLATE_ARGS <T>
00060 #define MYGUI_PARAMS
00061 #define MYGUI_ARGS
00062 #define MYGUI_TYPENAME
00063 
00064 #include "MyGUI_DelegateImplement.h"
00065 
00066 // one parameter
00067 #define MYGUI_SUFFIX       1
00068 #define MYGUI_TEMPLATE  template
00069 #define MYGUI_TEMPLATE_PARAMS  <typename TP1>
00070 #define MYGUI_TEMPLATE_ARGS    <TP1>
00071 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1>
00072 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1>
00073 #define MYGUI_PARAMS       TP1 p1
00074 #define MYGUI_ARGS         p1
00075 #define MYGUI_TYPENAME     typename
00076 
00077 #include "MyGUI_DelegateImplement.h"
00078 
00079 // two parameters
00080 #define MYGUI_SUFFIX       2
00081 #define MYGUI_TEMPLATE  template
00082 #define MYGUI_TEMPLATE_PARAMS  <typename TP1, typename TP2>
00083 #define MYGUI_TEMPLATE_ARGS    <TP1, TP2>
00084 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1, typename TP2>
00085 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1, TP2>
00086 #define MYGUI_PARAMS       TP1 p1, TP2 p2
00087 #define MYGUI_ARGS         p1, p2
00088 #define MYGUI_TYPENAME     typename
00089 
00090 #include "MyGUI_DelegateImplement.h"
00091 
00092 // three parameters
00093 #define MYGUI_SUFFIX       3
00094 #define MYGUI_TEMPLATE  template
00095 #define MYGUI_TEMPLATE_PARAMS  <typename TP1, typename TP2, typename TP3>
00096 #define MYGUI_TEMPLATE_ARGS    <TP1, TP2, TP3>
00097 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1, typename TP2, typename TP3>
00098 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1, TP2, TP3>
00099 #define MYGUI_PARAMS       TP1 p1, TP2 p2, TP3 p3
00100 #define MYGUI_ARGS         p1, p2, p3
00101 #define MYGUI_TYPENAME     typename
00102 
00103 #include "MyGUI_DelegateImplement.h"
00104 
00105 // four parameters
00106 #define MYGUI_SUFFIX       4
00107 #define MYGUI_TEMPLATE  template
00108 #define MYGUI_TEMPLATE_PARAMS  <typename TP1, typename TP2, typename TP3, typename TP4>
00109 #define MYGUI_TEMPLATE_ARGS    <TP1, TP2, TP3, TP4>
00110 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1, typename TP2, typename TP3, typename TP4>
00111 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1, TP2, TP3, TP4>
00112 #define MYGUI_PARAMS       TP1 p1, TP2 p2, TP3 p3, TP4 p4
00113 #define MYGUI_ARGS         p1, p2, p3, p4
00114 #define MYGUI_TYPENAME     typename
00115 
00116 #include "MyGUI_DelegateImplement.h"
00117 
00118 // five parameters
00119 #define MYGUI_SUFFIX       5
00120 #define MYGUI_TEMPLATE  template
00121 #define MYGUI_TEMPLATE_PARAMS  <typename TP1, typename TP2, typename TP3, typename TP4, typename TP5>
00122 #define MYGUI_TEMPLATE_ARGS    <TP1, TP2, TP3, TP4, TP5>
00123 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1, typename TP2, typename TP3, typename TP4, typename TP5>
00124 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1, TP2, TP3, TP4, TP5>
00125 #define MYGUI_PARAMS       TP1 p1, TP2 p2, TP3 p3, TP4 p4, TP5 p5
00126 #define MYGUI_ARGS         p1, p2, p3, p4, p5
00127 #define MYGUI_TYPENAME     typename
00128 
00129 #include "MyGUI_DelegateImplement.h"
00130 
00131 // six parameters
00132 #define MYGUI_SUFFIX       6
00133 #define MYGUI_TEMPLATE  template
00134 #define MYGUI_TEMPLATE_PARAMS  <typename TP1, typename TP2, typename TP3, typename TP4, typename TP5, typename TP6>
00135 #define MYGUI_TEMPLATE_ARGS    <TP1, TP2, TP3, TP4, TP5, TP6>
00136 #define MYGUI_T_TEMPLATE_PARAMS  <typename T, typename TP1, typename TP2, typename TP3, typename TP4, typename TP5, typename TP6>
00137 #define MYGUI_T_TEMPLATE_ARGS    <T, TP1, TP2, TP3, TP4, TP5, TP6>
00138 #define MYGUI_PARAMS       TP1 p1, TP2 p2, TP3 p3, TP4 p4, TP5 p5, TP6 p6
00139 #define MYGUI_ARGS         p1, p2, p3, p4, p5, p6
00140 #define MYGUI_TYPENAME     typename
00141 
00142 #include "MyGUI_DelegateImplement.h"
00143 
00144 
00145 } // namespace MyGUI
00146 
00147 #endif // __MYGUI_DELEGATE_H__