SundanceParamUtils.cpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                              Sundance
00005 //                 Copyright (2005) Sandia Corporation
00006 // 
00007 // Copyright (year first published) Sandia Corporation.  Under the terms 
00008 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 
00009 // retains certain rights in this software.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //                                                                                 
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA                                                                                
00025 // Questions? Contact Kevin Long (krlong@sandia.gov), 
00026 // Sandia National Laboratories, Livermore, California, USA
00027 // 
00028 // ************************************************************************
00029 /* @HEADER@ */
00030 
00031 #include "SundanceParamUtils.hpp"
00032 
00033 using Teuchos::Array;
00034 using Teuchos::ParameterList;
00035 
00036 using std::ifstream;
00037 
00038 namespace Sundance
00039 {
00040 ParameterList mergeParamLists(const ParameterList& pDef, 
00041   const ParameterList& pIn)
00042 {
00043   ParameterList rtn = pDef;
00044   using namespace Teuchos;
00045   
00046   /* replace any defaults with overriden values */
00047   ParameterList::ConstIterator i;
00048 
00049   for (i=pDef.begin(); i!=pDef.end(); i++)
00050   {
00051     const ParameterEntry& eDef = pDef.entry(i);
00052 
00053     const std::string& name = pDef.name(i);
00054     const ParameterEntry* eIn = pIn.getEntryPtr(name);
00055     if (eIn != NULL)
00056     {
00057       if (eIn->isList() && eDef.isList())
00058       {
00059         ParameterList sub = mergeParamLists(
00060           getValue<ParameterList>(eDef),
00061           getValue<ParameterList>(*eIn));
00062         rtn.set(name, sub);
00063 
00064       }
00065       else if (eIn->isType<int>() && eDef.isType<int>())
00066       {
00067         rtn.set(name, Teuchos::any_cast<int>(eIn->getAny()));
00068       }
00069       else
00070       {
00071         TEUCHOS_TEST_FOR_EXCEPTION(eIn->isList() && !eDef.isList(), 
00072           std::runtime_error, "mismatched parameters in mergeParams()");
00073         TEUCHOS_TEST_FOR_EXCEPTION(!eIn->isList() && eDef.isList(), 
00074           std::runtime_error, "mismatched parameters in mergeParams()");
00075         TEUCHOS_TEST_FOR_EXCEPT(1);
00076       }
00077     }
00078     else
00079     {
00080     }
00081   }
00082   return rtn;
00083 }
00084 }

Site Contact