////////////////////////////// // Dennis Andersen 2013 // ////////////////////////////// #ifndef MISC_OYSTER_CALLBACK_H #define MISC_OYSTER_CALLBACK_H #include "PostBox\IPostBox.h" namespace Oyster { namespace Callback { template struct CallbackFunction { typedef ReturnVal (*FNC)(ParamVal); }; template struct CallbackObject { virtual ReturnVal ObjectCallback(ParamVal) = 0; }; enum CallbackType { CallbackType_PostBox, CallbackType_Function, CallbackType_Object, }; template union OysterCallback { IPostBox* callbackPostBox; CallbackObject *callbackObject; typename CallbackFunction::FNC callbackFunction; OysterCallback() { memset(this, 0, sizeof(OysterCallback)); } OysterCallback(IPostBox* postbox) { callbackPostBox = postbox; } OysterCallback(CallbackObject* obj) { callbackObject = obj; } OysterCallback(typename CallbackFunction::FNC function) { callbackFunction = function; } }; } } #endif