|
Teuchos - Trilinos Tools Package
Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #include "Teuchos_FunctionObjectXMLConverterDB.hpp" 00043 #include "Teuchos_StaticSetupMacro.hpp" 00044 #include "Teuchos_XMLFunctionObjectExceptions.hpp" 00045 00046 00047 00048 namespace Teuchos { 00049 00050 00051 void FunctionObjectXMLConverterDB::addConverter( 00052 RCP<const FunctionObject> function, 00053 RCP<FunctionObjectXMLConverter> converterToAdd){ 00054 getConverterMap().insert( 00055 ConverterPair(function->getTypeAttributeValue(), converterToAdd)); 00056 } 00057 00058 00059 RCP<const FunctionObjectXMLConverter> 00060 FunctionObjectXMLConverterDB::getConverter(const FunctionObject& function){ 00061 ConverterMap::const_iterator it = 00062 getConverterMap().find(function.getTypeAttributeValue()); 00063 TEUCHOS_TEST_FOR_EXCEPTION(it == getConverterMap().end(), 00064 CantFindFunctionObjectConverterException, 00065 "Could not find a FunctionObjectXMLConverter for a FuncitonObject of type " << 00066 function.getTypeAttributeValue() << " when writing out a condition to " << 00067 "xml." << std::endl << std::endl 00068 ) 00069 return it->second; 00070 } 00071 00072 00073 RCP<const FunctionObjectXMLConverter> 00074 FunctionObjectXMLConverterDB::getConverter(const XMLObject& xmlObject) 00075 { 00076 std::string functionType = xmlObject.getRequired( 00077 FunctionObjectXMLConverter::getTypeAttributeName()); 00078 ConverterMap::const_iterator it = getConverterMap().find(functionType); 00079 TEUCHOS_TEST_FOR_EXCEPTION(it == getConverterMap().end(), 00080 CantFindFunctionObjectConverterException, 00081 "Could not find a FunctionObjectXMLConverter for a condition of type " << 00082 functionType << " when reading in a condition from " << 00083 "xml." << std::endl << std::endl 00084 ) 00085 return it->second; 00086 } 00087 00088 XMLObject FunctionObjectXMLConverterDB::convertFunctionObject( 00089 RCP<const FunctionObject> function) 00090 { 00091 return getConverter(*function)->fromFunctionObjecttoXML(function); 00092 } 00093 00094 RCP<FunctionObject> FunctionObjectXMLConverterDB::convertXML( 00095 const XMLObject& xmlObject) 00096 { 00097 return FunctionObjectXMLConverterDB::getConverter(xmlObject)-> 00098 fromXMLtoFunctionObject(xmlObject); 00099 } 00100 00101 FunctionObjectXMLConverterDB::ConverterMap& 00102 FunctionObjectXMLConverterDB::getConverterMap() 00103 { 00104 static ConverterMap masterMap; 00105 return masterMap; 00106 } 00107 00108 00109 } // namespace Teuchos 00110 00111 00112 namespace { 00113 00114 00115 TEUCHOS_STATIC_SETUP() 00116 { 00117 00118 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(int); 00119 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(unsigned int); 00120 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(short int); 00121 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(unsigned short int); 00122 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(long int); 00123 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(unsigned long int); 00124 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(double); 00125 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(float); 00126 00127 #ifdef HAVE_TEUCHOS_LONG_LONG_INT 00128 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(long long int); 00129 TEUCHOS_ADD_SIMPLEFUNCTIONCONVERTERS(unsigned long long int); 00130 #endif // HAVE_TEUCHOS_LONG_LONG_INT 00131 00132 } 00133 00134 00135 } // namespace
1.7.6.1