Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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.
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...
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
static RCP< const ParameterEntryXMLConverter > getConverter(RCP< const ParameterEntry > entry)
Get an appropriate ParameterEntryXMLConverter given a ParameterEntry.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Thrown when an appropriate ParameterEntryXMLConverter can&#39;t be found.
Representation of an XML data tree. XMLObject is a ref-counted handle to a XMLObjectImplem object...
Writes a ParameterList to an XML object.
Thrown when a parameter entry tag is missing it&#39;s type attribute.
static void printKnownConverters(std::ostream &out)
prints the xml tags associated with all known converters
static void addConverter(RCP< ParameterEntryXMLConverter > converterToAdd)
Add a converter to the database.
A last resort converter for when no others will do.
const std::string & getAttribute(const std::string &name) const
Return the value of the attribute with the specified name.
static RCP< const ParameterEntryXMLConverter > getDefaultConverter()
Gets the default converter to be used on Parameter Entries.
Smart reference counting pointer class for automatic garbage collection.
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()
const std::string & getRequired(const std::string &name) const
Get an attribute, throwing an std::exception if it is not found.
bool is_null() const
Returns true if the underlying pointer is null.