Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
Teuchos_YamlParser_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Teuchos: Common Tools Package
6 // Copyright (2004) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
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
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 
47 #ifndef TEUCHOS_YAMLPARSER_DECL_H_
48 #define TEUCHOS_YAMLPARSER_DECL_H_
49 
50 #include "yaml-cpp/yaml.h"
53 #include "Teuchos_RCP.hpp"
54 #include "Teuchos_PtrDecl.hpp"
56 
57 #include <iostream>
58 #include <fstream>
59 #include <iomanip>
60 #include <string>
61 #include <vector>
62 #include <cstdlib>
63 #include <cstring>
64 
65 namespace Teuchos
66 {
67 
68 #define MAKE_EXCEPTION_TYPE(Name) \
69 class Name : public Teuchos::ExceptionBase \
70 { \
71  public: \
72  Name(const std::string& arg) : ExceptionBase(arg) {} \
73 };
74 
75 MAKE_EXCEPTION_TYPE(YamlKeyError)
76 MAKE_EXCEPTION_TYPE(YamlScalarError)
77 MAKE_EXCEPTION_TYPE(YamlSequenceError)
78 MAKE_EXCEPTION_TYPE(YamlStructureError)
79 MAKE_EXCEPTION_TYPE(YamlUndefinedNodeError)
80 
81 #undef MAKE_EXCEPTION_TYPE
82 
83 /* Helper functions to provide similar functionality as XML versions in Teuchos */
84 void updateParametersFromYamlFile(const std::string& yamlFileName,
85  const Teuchos::Ptr<Teuchos::ParameterList>& paramList);
86 void updateParametersFromYamlString(const std::string& yamlData,
87  const Teuchos::Ptr<Teuchos::ParameterList>& paramList,
88  bool overwrite = true);
89 void updateParametersFromYamlCString(const char* const yamlData,
90  const Teuchos::Ptr<Teuchos::ParameterList>& paramList,
91  bool overwrite = true);
93 
94 std::string convertXmlToYaml(const std::string& xmlFileName); //returns filename of produced YAML file
95 void convertXmlToYaml(const std::string& xmlFileName, const std::string& yamlFileName); //writes to given filename
96 bool haveSameValuesUnordered(const Teuchos::ParameterList& lhs, const Teuchos::ParameterList& rhs, bool verbose = false);
97 
98 //Class modeled after Teuchos::XMLParameterListReader
99 namespace YAMLParameterList
100 {
101  Teuchos::RCP<Teuchos::ParameterList> parseYamlText(const std::string& text);
103  Teuchos::RCP<Teuchos::ParameterList> parseYamlFile(const std::string& yamlFile);
104  void writeYamlFile(const std::string& yamlFile, Teuchos::RCP<Teuchos::ParameterList>& pl);
105  Teuchos::RCP<Teuchos::ParameterList> readParams(std::vector<YAML::Node>& lists);
106  //load all k-v pairs within node into param list (checks if node is map, and handles nesting)
107  //topLevel means to put sub-pairs directly into parent and not create named sublists
108  void processMapNode(const YAML::Node& node, Teuchos::ParameterList& parent, bool topLevel = false);
109  void processKeyValueNode(const std::string& key, const YAML::Node& node, Teuchos::ParameterList& parent, bool topLevel = false);
110  // template<typename T> Teuchos::Array<T> getYamlArray(const YAML::Node& node);
111  void writeParameterList(Teuchos::ParameterList& pl, std::ofstream& yaml, int indentLevel);
112  void writeParameter(const std::string& paramName, const Teuchos::ParameterEntry& entry, std::ofstream& yaml, int indentLevel); //throws if the entry's type is not supported
113  void generalWriteString(const std::string& str, std::ofstream& yaml);
114  void generalWriteDouble(double d, std::ofstream& yaml);
115  bool stringNeedsQuotes(const std::string& str);
117 }
118 
119 } //namespace
120 
121 #endif
Object held as the "value" in the Teuchos::ParameterList std::map.
C++ Standard Library compatable filtered iterator.
void writeYamlFile(const std::string &yamlFile, Teuchos::RCP< Teuchos::ParameterList > &pl)
void updateParametersFromYamlFile(const std::string &yamlFileName, const Teuchos::Ptr< Teuchos::ParameterList > &paramList)
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT void updateParametersFromYamlCString(const char *const data, const Teuchos::Ptr< Teuchos::ParameterList > &paramList, bool overwrite)
This object is held as the "value" in the Teuchos::ParameterList std::map.
void processKeyValueNode(const std::string &key, const YAML::Node &node, Teuchos::ParameterList &parent, bool topLevel)
void generalWriteDouble(double d, std::ofstream &yaml)
Teuchos::RCP< Teuchos::ParameterList > parseYamlText(const std::string &text)
void updateParametersFromYamlString(const std::string &yamlData, const Teuchos::Ptr< Teuchos::ParameterList > &paramList, bool overwrite)
Templated Parameter List class.
void processMapNode(const YAML::Node &node, Teuchos::ParameterList &parent, bool topLevel)
void writeParameterList(Teuchos::ParameterList &pl, std::ofstream &yaml, int indentLevel)
#define MAKE_EXCEPTION_TYPE(Name)
Teuchos::RCP< Teuchos::ParameterList > readParams(std::vector< YAML::Node > &lists)
A list of parameters of arbitrary type.
Teuchos::RCP< Teuchos::ParameterList > parseYamlFile(const std::string &yamlFile)
bool stringNeedsQuotes(const std::string &str)
Definition of XMLInputSource derived class for reading XML from a file.
std::string convertXmlToYaml(const std::string &xmlFileName)
Teuchos::RCP< Teuchos::ParameterList > getParametersFromYamlFile(const std::string &yamlFileName)
void writeParameter(const std::string &paramName, const Teuchos::ParameterEntry &entry, std::ofstream &yaml, int indentLevel)
Reference-counted pointer class and non-member templated function implementations.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
void generalWriteString(const std::string &str, std::ofstream &yaml)
bool haveSameValuesUnordered(const Teuchos::ParameterList &lhs, const Teuchos::ParameterList &rhs, bool verbose)
Teuchos::ParameterList::ConstIterator PLIter