#include "precompiled.h" #include "Messages.h" // We want to include Messages.h again below, with some different definitions, // so cheat and undefine its include-guard #undef INCLUDED_MESSAGES #include #include #include "SharedTypes.h" #include "Shareable.h" #include #include namespace AtlasMessage { struct IMessage; typedef void (*msgHandler)(IMessage*); typedef std::map msgHandlers; extern msgHandlers& GetMsgHandlers(); struct Command; typedef Command* (*cmdHandler)(const void*); typedef std::map cmdHandlers; extern cmdHandlers& GetCmdHandlers(); #define MESSAGE(name, vals) \ extern void f##name##_wrapper(AtlasMessage::IMessage*); \ AtlasMessage::GetMsgHandlers().insert(std::pair(#name, &f##name##_wrapper)); #define QUERY(name, in_vals, out_vals) \ extern void f##name##_wrapper(AtlasMessage::IMessage*); \ AtlasMessage::GetMsgHandlers().insert(std::pair(#name, &f##name##_wrapper)); #define COMMAND(name, merge, vals) \ extern cmdHandler c##name##_create(); \ GetCmdHandlers().insert(std::pair("c"#name, c##name##_create())); #undef SHAREABLE_STRUCT #define SHAREABLE_STRUCT(name) void RegisterHandlers() { MESSAGE(DoCommand, ); MESSAGE(UndoCommand, ); MESSAGE(RedoCommand, ); MESSAGE(MergeCommand, ); #define MESSAGES_SKIP_SETUP #include "Messages.h" } }