--- /dev/null
+Improved: The parse functions of ParameterHandler used to add subsections
+if subsections/parameters have not been defined. This led to an output
+of ParameterHandler::print_parameters() that also contained these subsections.
+This is not the case anymore.
+<br>
+(Peter Munch, Magdalena Schreter-Fleischhacker, 2024/02/12)
const bool alias_is_deprecated = false);
/**
- * Enter a subsection. If it does not yet exist, create it.
+ * Enter a subsection. If it does not yet exist, create it if requested.
*/
void
- enter_subsection(const std::string &subsection);
+ enter_subsection(const std::string &subsection,
+ const bool create_path_if_needed = true);
/**
* Leave present subsection.
}
else
{
- // it must be a subsection
- prm.enter_subsection(demangle(p.first));
- read_xml_recursively(p.second,
- (current_path.empty() ?
- p.first :
- current_path + path_separator + p.first),
- path_separator,
- patterns,
- skip_undefined,
- prm);
- prm.leave_subsection();
+ try
+ {
+ // it must be a subsection
+ prm.enter_subsection(demangle(p.first), !skip_undefined);
+ read_xml_recursively(p.second,
+ (current_path.empty() ?
+ p.first :
+ current_path + path_separator +
+ p.first),
+ path_separator,
+ patterns,
+ skip_undefined,
+ prm);
+ prm.leave_subsection();
+ }
+ catch (const ParameterHandler::ExcEntryUndeclared &)
+ {
+ // ignore undeclared entry assert
+ }
}
}
}
void
-ParameterHandler::enter_subsection(const std::string &subsection)
+ParameterHandler::enter_subsection(const std::string &subsection,
+ const bool create_path_if_needed)
{
// if necessary create subsection
- if (!entries->get_child_optional(get_current_full_path(subsection)))
+ const auto path_exists =
+ entries->get_child_optional(get_current_full_path(subsection));
+
+ if (!create_path_if_needed)
+ {
+ AssertThrow(path_exists,
+ ExcEntryUndeclared(get_current_full_path(subsection)));
+ }
+
+ if (!path_exists)
entries->add_child(get_current_full_path(subsection),
boost::property_tree::ptree());
--- /dev/null
+// ------------------------------------------------------------------------
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// Copyright (C) 2020 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// Part of the source code is dual licensed under Apache-2.0 WITH
+// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
+// governing the source code and code contributions can be found in
+// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
+//
+// ------------------------------------------------------------------------
+
+
+
+// check ParameterHandler::parse_input() for json file
+
+#include <deal.II/base/parameter_handler.h>
+
+#include "../tests.h"
+
+
+int
+main()
+{
+ initlog();
+
+ ParameterHandler prm;
+
+ double test_0 = 0;
+ double test_1 = 0;
+
+ // test if underscore can be parsed
+ prm.add_parameter("test 0", test_0);
+ prm.add_parameter("test 1", test_1);
+
+ std::string source = SOURCE_DIR;
+ std::string filename = source + "/prm/parameter_handler_read_json_04.json";
+
+ std::ifstream file;
+ file.open(filename);
+ prm.parse_input_from_json(file, true);
+
+ prm.print_parameters(deallog.get_file_stream(),
+ ParameterHandler::OutputStyle::ShortJSON);
+
+ return 0;
+}
--- /dev/null
+
+{
+ "test 0": "1",
+ "test 1": "1"
+}
--- /dev/null
+{
+ "test 0": "1",
+ "test 1": "1",
+ "test 2": "1",
+ "test 3": {
+ "test 4" : "1"
+ }
+}