include/voreen/core/animation/interpolationfunctionfactory.h
00001 /********************************************************************** 00002 * * 00003 * Voreen - The Volume Rendering Engine * 00004 * * 00005 * Copyright (C) 2005-2010 The Voreen Team. <http://www.voreen.org> * 00006 * * 00007 * This file is part of the Voreen software package. Voreen is free * 00008 * software: you can redistribute it and/or modify it under the terms * 00009 * of the GNU General Public License version 2 as published by the * 00010 * Free Software Foundation. * 00011 * * 00012 * Voreen is distributed in the hope that it will be useful, * 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00015 * GNU General Public License for more details. * 00016 * * 00017 * You should have received a copy of the GNU General Public License * 00018 * in the file "LICENSE.txt" along with this program. * 00019 * If not, see <http://www.gnu.org/licenses/>. * 00020 * * 00021 * The authors reserve all rights not expressly granted herein. For * 00022 * non-commercial academic use see the license exception specified in * 00023 * the file "LICENSE-academic.txt". To get information about * 00024 * commercial licensing please contact the authors. * 00025 * * 00026 **********************************************************************/ 00027 00028 #ifndef VRN_INTERPOLATIONFUNCTIONFACTORY_H 00029 #define VRN_INTERPOLATIONFUNCTIONFACTORY_H 00030 00031 #include <vector> 00032 #include <string> 00033 #include "voreen/core/animation/interpolationfunction.h" 00034 #include "voreen/core/io/serialization/serialization.h" 00035 00036 namespace voreen { 00037 00038 template <class T> class InterpolationFunction; 00039 00043 template <class T> class InterpolationFunctionFactory : public SerializableFactory { 00044 public: 00045 00049 InterpolationFunctionFactory(); 00050 00054 ~InterpolationFunctionFactory(); 00055 00059 const std::vector<std::string> getListOfFunctionnames() const; 00060 00064 const std::vector<InterpolationFunction<T>*>& getListOfFunctions() const; 00065 00070 InterpolationFunction<T>* getFunctionByName(std::string name) const; 00071 00075 virtual const std::string getTypeString(const std::type_info& type) const; 00076 00080 virtual Serializable* createType(const std::string& typeString); 00081 00082 static InterpolationFunctionFactory<T>* getInstance(); 00083 00084 private: 00085 00090 void registerFunction(InterpolationFunctionBase* func); 00091 00092 std::vector<InterpolationFunction<T>*> functions_; 00093 00094 static InterpolationFunctionFactory<T>* instance_; 00095 }; 00096 00097 } // namespace voreen 00098 00099 #endif