Teuchos - Trilinos Tools Package  Version of the Day
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 
48 namespace Teuchos{
49 
50 
51 RCP<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 
103 {
104  static RCP<const AnyParameterEntryConverter> defaultConverter;
105  if(defaultConverter.is_null()){
106  defaultConverter = rcp(new AnyParameterEntryConverter);
107  }
108  return defaultConverter;
109 }
110 
111 ParameterEntryXMLConverterDB::ConverterMap&
112 ParameterEntryXMLConverterDB::getConverterMap()
113 {
114  static ConverterMap masterMap;
115  return masterMap;
116 
117 }
118 
119 
120 } //namespace Teuchos
121 
122 
123 namespace {
124 
125 TEUCHOS_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,...
const std::string & getRequired(const std::string &name) const
Get an attribute, throwing an std::exception if it is not found.
const std::string & getAttribute(const std::string &name) const
Return the value of the attribute with the specified name.
bool hasAttribute(const std::string &name) const
Find out if the current node has an attribute of the specified name.
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.