demotool/common.cc
2017-11-23 23:31:24 +01:00

51 lines
1 KiB
C++

#include "externals.hh"
#include "common.hh"
#include "c-filewatcher.hh"
#include "c-opcomp.hh"
#include "c-ops.hh"
#include "sync.hh"
#include "undo.hh"
namespace {
struct CommonData_
{
T_FilesWatcher watcher;
T_SyncManager sync;
T_ScriptManager ops;
T_UndoManager undo;
};
std::aligned_storage_t< sizeof( CommonData_ ) , alignof( CommonData_ ) > Instance_;
} // namespace <anon>
/*----------------------------------------------------------------------------*/
void Common::Init( ) noexcept
{
new ((char*)&Instance_) CommonData_( );
}
void Common::Shutdown( ) noexcept
{
((CommonData_*)(char*)&Instance_)->~CommonData_( );
}
/*----------------------------------------------------------------------------*/
#define M_GET_( P ) ((CommonData_*)(char*)&Instance_)->P
T_FilesWatcher& Common::Watcher( ) noexcept
{ return M_GET_( watcher ); }
T_SyncManager& Common::Sync( ) noexcept
{ return M_GET_( sync ); }
T_ScriptManager& Common::Ops( ) noexcept
{ return M_GET_( ops ); }
T_UndoManager& Common::Undo( ) noexcept
{ return M_GET_( undo ); }