From a7f30391d04db33f367667c5eabbfddc158654a2 Mon Sep 17 00:00:00 2001 From: Dmitry Kurtaev Date: Mon, 12 Nov 2018 13:29:38 +0300 Subject: [PATCH] Add FileNode::keys() missed during refactoring --- modules/core/include/opencv2/core/persistence.hpp | 5 +++++ modules/core/src/persistence.cpp | 13 +++++++++++++ modules/core/test/test_io.cpp | 6 ++++++ 3 files changed, 24 insertions(+) diff --git a/modules/core/include/opencv2/core/persistence.hpp b/modules/core/include/opencv2/core/persistence.hpp index a0f7e1e24d..73bda78324 100644 --- a/modules/core/include/opencv2/core/persistence.hpp +++ b/modules/core/include/opencv2/core/persistence.hpp @@ -526,6 +526,11 @@ public: */ CV_WRAP_AS(at) FileNode operator[](int i) const; + /** @brief Returns keys of a mapping node. + @returns Keys of a mapping node. + */ + CV_WRAP std::vector keys() const; + /** @brief Returns type of the node. @returns Type of the node. See FileNode::Type */ diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index f869383f84..fa45eed9be 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -2083,6 +2083,19 @@ FileNode FileNode::operator[](int i) const return *it; } +std::vector FileNode::keys() const +{ + CV_Assert(isMap()); + + std::vector res; + res.reserve(size()); + for (FileNodeIterator it = begin(); it != end(); ++it) + { + res.push_back((*it).name()); + } + return res; +} + int FileNode::type() const { const uchar* p = ptr(); diff --git a/modules/core/test/test_io.cpp b/modules/core/test/test_io.cpp index 8554935b9f..3ec5f19500 100644 --- a/modules/core/test/test_io.cpp +++ b/modules/core/test/test_io.cpp @@ -1565,6 +1565,12 @@ TEST(Core_InputOutput, FileStorage_json_bool) ASSERT_EQ((int)fs["map_value"]["bool_true"], 1); ASSERT_EQ((std::string)fs["map_value"]["str_false"], "false"); ASSERT_EQ((int)fs["bool_false"], 0); + + std::vector keys = fs["map_value"].keys(); + ASSERT_EQ((int)keys.size(), 3); + ASSERT_EQ(keys[0], "int_value"); + ASSERT_EQ(keys[1], "bool_true"); + ASSERT_EQ(keys[2], "str_false"); fs.release(); }