00001 // $Id: LOCA_Parameter_Entry.H,v 1.7 2006/08/22 00:01:37 rppawlo Exp $ 00002 // $Source: /space/CVS/Trilinos/packages/nox/src-loca/src/LOCA_Parameter_Entry.H,v $ 00003 00004 //@HEADER 00005 // ************************************************************************ 00006 // 00007 // NOX: An Object-Oriented Nonlinear Solver Package 00008 // Copyright (2002) Sandia Corporation 00009 // 00010 // LOCA: Library of Continuation Algorithms Package 00011 // Copyright (2005) Sandia Corporation 00012 // 00013 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00014 // license for use of this work by or on behalf of the U.S. Government. 00015 // 00016 // This library is free software; you can redistribute it and/or modify 00017 // it under the terms of the GNU Lesser General Public License as 00018 // published by the Free Software Foundation; either version 2.1 of the 00019 // License, or (at your option) any later version. 00020 // 00021 // This library is distributed in the hope that it will be useful, but 00022 // WITHOUT ANY WARRANTY; without even the implied warranty of 00023 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00024 // Lesser General Public License for more details. 00025 // 00026 // You should have received a copy of the GNU Lesser General Public 00027 // License along with this library; if not, write to the Free Software 00028 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00029 // USA 00030 // 00031 // Questions? Contact Roger Pawlowski (rppawlo@sandia.gov) or 00032 // Eric Phipps (etphipp@sandia.gov), Sandia National Laboratories. 00033 // ************************************************************************ 00034 // CVS Information 00035 // $Source: /space/CVS/Trilinos/packages/nox/src-loca/src/LOCA_Parameter_Entry.H,v $ 00036 // $Author: rppawlo $ 00037 // $Date: 2006/08/22 00:01:37 $ 00038 // $Revision: 1.7 $ 00039 // ************************************************************************ 00040 //@HEADER 00041 00042 #ifndef LOCA_PARAMETER_ENTRY_H 00043 #define LOCA_PARAMETER_ENTRY_H 00044 00045 namespace LOCA { 00046 00047 namespace Parameter { 00048 00050 00055 class AbstractEntry { 00056 public: 00057 00059 AbstractEntry() {} 00060 00062 virtual ~AbstractEntry() {} 00063 }; 00064 00066 00071 template <class ValueType> 00072 class Entry : public AbstractEntry { 00073 public: 00074 00076 Entry() {} 00077 00079 virtual ~Entry() {} 00080 00082 virtual void setValue(const ValueType& value) = 0; 00083 00085 virtual ValueType getValue() const = 0; 00086 00088 00092 virtual void setIsInLibrary() = 0; 00093 }; 00094 00096 00111 template <class FunctorType, class ValueType> 00112 class StandardEntry : 00113 public Entry<ValueType> { 00114 00115 public: 00116 00118 StandardEntry(FunctorType* fctr) : deleteFctr(false), func(fctr) {} 00119 00121 virtual ~StandardEntry() { if (deleteFctr) delete func; } 00122 00124 virtual void setValue(const ValueType& value) { func->set(value); } 00125 00127 virtual ValueType getValue() const { return func->get(); } 00128 00130 00134 virtual void setIsInLibrary() { deleteFctr = true; } 00135 00136 private: 00137 00139 StandardEntry(const StandardEntry&); 00140 00142 StandardEntry& operator=(const StandardEntry&); 00143 00144 protected: 00145 00147 bool deleteFctr; 00148 00150 FunctorType* func; 00151 }; 00152 00166 template <class ObjectType, class ValueType> 00167 class DefaultFunctor { 00168 public: 00169 00171 00176 DefaultFunctor(ObjectType& object, 00177 ValueType ObjectType::* object_val_ptr) : 00178 obj(object), obj_val_ptr(object_val_ptr) {} 00179 00181 virtual ~DefaultFunctor() {} 00182 00184 virtual void set(const ValueType& value) { obj.*obj_val_ptr = value; } 00185 00187 virtual ValueType get() const { return obj.*obj_val_ptr; } 00188 00189 private: 00190 00192 DefaultFunctor(const DefaultFunctor&); 00193 00195 DefaultFunctor& operator=(const DefaultFunctor&); 00196 00197 protected: 00198 00200 ObjectType& obj; 00201 00203 ValueType ObjectType::* obj_val_ptr; 00204 }; 00205 } 00206 } 00207 00208 #endif