Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_ParameterEntryXMLConverterDB.cpp
1
2// @HEADER
3// ***********************************************************************
4//
5// Teuchos: Common Tools Package
6// Copyright (2004) Sandia Corporation
7//
8// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9// license for use of this work by or on behalf of the U.S. Government.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39//
40// ***********************************************************************
41// @HEADER
42
43#include "Teuchos_ParameterEntryXMLConverterDB.hpp"
45#include "Teuchos_StaticSetupMacro.hpp"
46#include "Teuchos_TwoDArray.hpp"
47
48namespace Teuchos{
49
50
51RCP<const ParameterEntryXMLConverter>
53{
54 ConverterMap::const_iterator it =
55 getConverterMap().find(entry->getAny().typeName());
56 if(it == getConverterMap().end()){
57 return getDefaultConverter();
58 }
59 else{
60 return it->second;
61 }
62}
63
66{
70 ParameterEntry::getTagName() <<" tags must "
72 " attribute." << std::endl <<
73 "Bad Parameter: " <<
75 std::endl << std::endl);
76
77 std::string parameterType = xmlObject.getRequired(
79 ConverterMap::const_iterator it = getConverterMap().find(parameterType);
80
81 TEUCHOS_TEST_FOR_EXCEPTION(it == getConverterMap().end(),
83 "Can't find converter for parameter entry of type: " <<
85 std::endl << std::endl);
86
87 return it->second;
88}
89
91 out << "Known ParameterEntryXMLConverters: " << std::endl;
92 for(
93 ConverterMap::const_iterator it = getConverterMap().begin();
94 it != getConverterMap().end();
95 ++it)
96 {
97 out << "\t" << it->first <<std::endl;
98 }
99}
100
110
111ParameterEntryXMLConverterDB::ConverterMap&
112ParameterEntryXMLConverterDB::getConverterMap()
113{
114 static ConverterMap masterMap;
115 return masterMap;
116
117}
118
119
120} //namespace Teuchos
121
122
123namespace {
124
125TEUCHOS_STATIC_SETUP()
126{
127 typedef unsigned int uint;
128 typedef unsigned short int ushort;
129 typedef unsigned long ulong;
130 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(int);
131 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(uint);
132 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(short);
133 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(ushort);
134 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(long);
135 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(ulong);
136 typedef long long int llint;
137 typedef unsigned long long int ullint;
138 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(llint);
139 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(ullint);
140 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(double);
141 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(float);
142
143 typedef std::string myString;
144 TEUCHOS_ADD_TYPE_AND_ARRAYTYPE_CONVERTER(myString);
145
146 TEUCHOS_ADD_TYPE_CONVERTER(char);
147 TEUCHOS_ADD_TYPE_CONVERTER(bool);
148
151}
152
153
154} // namespace
A thin wrapper around the Teuchos Array class that allows for 2 dimensional arrays.
Writes a ParameterList to an XML object.
A last resort converter for when no others will do.
Thrown when an appropriate ParameterEntryXMLConverter can't be found.
Thrown when a parameter entry tag is missing it's type attribute.
static RCP< const ParameterEntryXMLConverter > getDefaultConverter()
Gets the default converter to be used on Parameter Entries.
static void addConverter(RCP< ParameterEntryXMLConverter > converterToAdd)
Add a converter to the database.
static void printKnownConverters(std::ostream &out)
prints the xml tags associated with all known converters
static RCP< const ParameterEntryXMLConverter > getConverter(RCP< const ParameterEntry > entry)
Get an appropriate ParameterEntryXMLConverter given a ParameterEntry.
static const std::string & getTagName()
Get the string that should be used as the tag name for all parameters when they are serialized to xml...
Smart reference counting pointer class for automatic garbage collection.
bool is_null() const
Returns true if the underlying pointer is null.
Representation of an XML data tree. XMLObject is a ref-counted handle to a XMLObjectImplem object,...
static const std::string & getNameAttributeName()
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.