#include "externals.hh" #include "common.hh" #include "c-filewatcher.hh" #include "c-opcomp.hh" #include "c-ops.hh" #include "c-project.hh" #include "c-sync.hh" #include "c-undo.hh" namespace { struct CommonData_ { T_Project project; T_FilesWatcher watcher; T_SyncManager sync; T_ScriptManager ops; T_UndoManager undo; CommonData_( T_String const& path ) noexcept : project{ path } {} }; std::aligned_storage_t< sizeof( CommonData_ ) , alignof( CommonData_ ) > Instance_; } // namespace /*----------------------------------------------------------------------------*/ void Common::Init( T_String const& path ) noexcept { new ((char*)&Instance_) CommonData_( path ); } void Common::Shutdown( ) noexcept { ((CommonData_*)(char*)&Instance_)->~CommonData_( ); } /*----------------------------------------------------------------------------*/ #define M_GET_( P ) ((CommonData_*)(char*)&Instance_)->P T_Project& Common::Project( ) noexcept { return M_GET_( project ); } 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 ); }