/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2012 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #ifndef cmGlobalGeneratorFactory_h #define cmGlobalGeneratorFactory_h #include "cmStandardIncludes.h" class cmGlobalGenerator; struct cmDocumentationEntry; /** \class cmGlobalGeneratorFactory * \brief Responable for creating cmGlobalGenerator instances * * Subclasses of this class generate instances of cmGlobalGenerator. */ class cmGlobalGeneratorFactory { public: virtual ~cmGlobalGeneratorFactory() {} /** Create a GlobalGenerator */ virtual cmGlobalGenerator* CreateGlobalGenerator(const char* n) const = 0; /** Get the documentation entry for this factory */ virtual void GetDocumentation(cmDocumentationEntry& entry) const = 0; /** Get the names of the current registered generators */ virtual void GetGenerators(std::vector& names) const = 0; }; template class cmGlobalGeneratorSimpleFactory : public cmGlobalGeneratorFactory { public: /** Create a GlobalGenerator */ virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const { if (strcmp(name, T::GetActualName())) return 0; return new T; } /** Get the documentation entry for this factory */ virtual void GetDocumentation(cmDocumentationEntry& entry) const { T::GetDocumentation(entry); } /** Get the names of the current registered generators */ virtual void GetGenerators(std::vector& names) const { names.push_back(T::GetActualName()); } }; #endif