From 67879bd636193cc223f660ee155aff10bcf7f67a Mon Sep 17 00:00:00 2001
From: Felix Schindler <felix.schindler@wwu.de>
Date: Wed, 10 Sep 2014 13:22:12 +0200
Subject: [PATCH] [common.configuration] added ctor taking an istream

---
 dune/stuff/common/configuration.cc | 18 ++++++++++++++++++
 dune/stuff/common/configuration.hh |  8 ++++++++
 2 files changed, 26 insertions(+)

diff --git a/dune/stuff/common/configuration.cc b/dune/stuff/common/configuration.cc
index 0f32b0076..568526891 100644
--- a/dune/stuff/common/configuration.cc
+++ b/dune/stuff/common/configuration.cc
@@ -100,6 +100,17 @@ Configuration::Configuration(const Configuration& other)
 {
 }
 
+Configuration::Configuration(std::istream& in, const bool record_defaults, const bool warn_on_default_access,
+                             const bool log_on_exit, const std::string logfile)
+  : BaseType(initialize(in))
+  , requests_map_()
+  , record_defaults_(record_defaults)
+  , warn_on_default_access_(warn_on_default_access)
+  , log_on_exit_(log_on_exit)
+  , logfile_(logfile)
+{
+}
+
 Configuration::Configuration(const std::string filename, const bool record_defaults, const bool warn_on_default_access,
                              const bool log_on_exit, const std::string logfile)
   : Configuration::Configuration(initialize(filename), record_defaults, warn_on_default_access, log_on_exit, logfile)
@@ -481,6 +492,13 @@ ParameterTree Configuration::initialize(const std::string filename)
   return param_tree;
 } // ... initialize(...)
 
+ParameterTree Configuration::initialize(std::istream& in)
+{
+  ParameterTree param_tree;
+  Dune::ParameterTreeParser::readINITree(in, param_tree);
+  return param_tree;
+} // ... initialize(...)
+
 ParameterTree Configuration::initialize(int argc, char** argv)
 {
   ParameterTree param_tree;
diff --git a/dune/stuff/common/configuration.hh b/dune/stuff/common/configuration.hh
index 4b4ba101e..74fa77e8f 100644
--- a/dune/stuff/common/configuration.hh
+++ b/dune/stuff/common/configuration.hh
@@ -117,6 +117,11 @@ public:
 
   Configuration(const Configuration& other);
 
+  Configuration(std::istream& in, const bool record_defaults = internal::configuration_record_defaults,
+                const bool warn_on_default_access = internal::configuration_warn_on_default_access,
+                const bool log_on_exit            = internal::configuration_log_on_exit,
+                const std::string logfile = internal::configuration_logfile);
+
   //! read ParameterTree from file and call Configuration(const ParameterTree& tree)
   explicit Configuration(const std::string filename, const bool record_defaults, const bool warn_on_default_access,
                          const bool log_on_exit, const std::string logfile);
@@ -578,6 +583,9 @@ private:
   //! read Dune::ParameterTree from file
   static ParameterTree initialize(const std::string filename);
 
+  //! read Dune::ParameterTree from istream
+  static ParameterTree initialize(std::istream& in);
+
   //! read Dune::ParameterTree from arguments
   static ParameterTree initialize(int argc, char** argv);
 
-- 
GitLab