|
Teuchos Package Browser (Single Doxygen Collection)
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_ConditionXMLConverterDB.hpp" 00043 #include "Teuchos_XMLConditionExceptions.hpp" 00044 #include "Teuchos_StaticSetupMacro.hpp" 00045 00046 00047 00048 namespace Teuchos { 00049 00050 00051 void ConditionXMLConverterDB::addConverter( 00052 RCP<const Condition> condition, 00053 RCP<ConditionXMLConverter> converterToAdd){ 00054 getConverterMap().insert( 00055 ConverterPair(condition->getTypeAttributeValue(), converterToAdd)); 00056 } 00057 00058 00059 RCP<const ConditionXMLConverter> 00060 ConditionXMLConverterDB::getConverter(const Condition& condition){ 00061 ConverterMap::const_iterator it = 00062 getConverterMap().find(condition.getTypeAttributeValue()); 00063 TEUCHOS_TEST_FOR_EXCEPTION(it == getConverterMap().end(), 00064 CantFindConditionConverterException, 00065 "Could not find a ConditionXMLConverter for a condition of type " << 00066 condition.getTypeAttributeValue() << " when writing out a condition to " << 00067 "xml." << std::endl << std::endl 00068 ) 00069 return it->second; 00070 } 00071 00072 00073 RCP<const ConditionXMLConverter> 00074 ConditionXMLConverterDB::getConverter(const XMLObject& xmlObject) 00075 { 00076 std::string conditionType = xmlObject.getRequired( 00077 ConditionXMLConverter::getTypeAttributeName()); 00078 ConverterMap::const_iterator it = getConverterMap().find(conditionType); 00079 TEUCHOS_TEST_FOR_EXCEPTION(it == getConverterMap().end(), 00080 CantFindConditionConverterException, 00081 "Could not find a ConditionXMLConverter for a condition of type " << 00082 conditionType << " when reading in a condition from " << 00083 "xml." << std::endl << std::endl 00084 ) 00085 return it->second; 00086 } 00087 00088 XMLObject ConditionXMLConverterDB::convertCondition( 00089 RCP<const Condition> condition, 00090 const XMLParameterListWriter::EntryIDsMap& entryIDsMap) 00091 { 00092 return getConverter(*condition)->fromConditiontoXML(condition, entryIDsMap); 00093 } 00094 00095 RCP<Condition> ConditionXMLConverterDB::convertXML( 00096 const XMLObject& xmlObject, 00097 const XMLParameterListReader::EntryIDsMap& entryIDsMap) 00098 { 00099 return ConditionXMLConverterDB::getConverter(xmlObject)-> 00100 fromXMLtoCondition(xmlObject, entryIDsMap); 00101 } 00102 00103 ConditionXMLConverterDB::ConverterMap& 00104 ConditionXMLConverterDB::getConverterMap() 00105 { 00106 static ConverterMap masterMap; 00107 return masterMap; 00108 } 00109 00110 00111 } // namespace Teuchos 00112 00113 00114 namespace { 00115 00116 00117 TEUCHOS_STATIC_SETUP() 00118 { 00119 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(int); 00120 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(unsigned int); 00121 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(short int); 00122 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(unsigned short int); 00123 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(long int); 00124 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(unsigned long int); 00125 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(double); 00126 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(float); 00127 00128 #ifdef HAVE_TEUCHOS_LONG_LONG_INT 00129 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(long long int); 00130 TEUCHOS_ADD_NUMBERCONDITION_CONVERTER(unsigned long long int); 00131 #endif // HAVE_TEUCHOS_LONG_LONG_INT 00132 00133 Teuchos::ConditionXMLConverterDB::addConverter( 00134 Teuchos::DummyObjectGetter<Teuchos::StringCondition>:: 00135 getDummyObject(), 00136 Teuchos::rcp(new Teuchos::StringConditionConverter)); 00137 00138 Teuchos::ConditionXMLConverterDB::addConverter( 00139 Teuchos::DummyObjectGetter<Teuchos::BoolCondition>:: 00140 getDummyObject(), 00141 Teuchos::rcp(new Teuchos::BoolConditionConverter)); 00142 00143 Teuchos::ConditionXMLConverterDB::addConverter( 00144 Teuchos::DummyObjectGetter<Teuchos::OrCondition>:: 00145 getDummyObject(), 00146 Teuchos::rcp(new Teuchos::OrConditionConverter)); 00147 00148 Teuchos::ConditionXMLConverterDB::addConverter( 00149 Teuchos::DummyObjectGetter<Teuchos::AndCondition>:: 00150 getDummyObject(), 00151 Teuchos::rcp(new Teuchos::AndConditionConverter)); 00152 00153 Teuchos::ConditionXMLConverterDB::addConverter( 00154 Teuchos::DummyObjectGetter<Teuchos::EqualsCondition>:: 00155 getDummyObject(), 00156 Teuchos::rcp(new Teuchos::EqualsConditionConverter)); 00157 00158 Teuchos::ConditionXMLConverterDB::addConverter( 00159 Teuchos::DummyObjectGetter<Teuchos::NotCondition>:: 00160 getDummyObject(), 00161 Teuchos::rcp(new Teuchos::NotConditionConverter)); 00162 } 00163 00164 00165 } // namespace
1.7.6.1