/********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ #include "MGCLStdAfx.h" #include "mg/GelFactory.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif namespace { bool g_valid = false; // クラスオブジェクトが有効かどうか } // コンストラクター MGGelFactoryRegistry::MGGelFactoryRegistry() { g_valid = true; } // デストラクター MGGelFactoryRegistry::~MGGelFactoryRegistry() { g_valid = false; } // シングルトンアクセス。 MGGelFactoryRegistry* MGGelFactoryRegistry::get_instance() { static MGGelFactoryRegistry registry; return ®istry; } // クラスオブジェクトが有効かどうかを返す。 bool MGGelFactoryRegistry::is_valid() { return g_valid; } // 名前からコマンドオブジェクトを作成する。 MGGel* MGGelFactoryRegistry::create_gel(const KeyType& name) const { TypeMap::const_iterator it = m_map.find(name); if(it == m_map.end()){ //throw UnknownGelError(name); return 0; } return it->second->create_gel(); } // ファクトリーオブジェクトを登録する。 void MGGelFactoryRegistry::register_factory( const KeyType& name, MGGelFactoryBase* factory) { m_map.insert(std::make_pair(name, factory)); } // ファクトリーオブジェクトを登録から削除する。 void MGGelFactoryRegistry::unregister_factory(const KeyType& name) { m_map.erase(name); } // ファクトリーオブジェクトを登録から削除する。 void MGGelFactoryRegistry::unregister_factory(MGGelFactoryBase* factory) { TypeMap::iterator first = m_map.begin(), last = m_map.end(); for(; first != last;){ if(first->second == factory){ first = m_map.erase(first); } else{ ++first; } } }