From feb8c9be78474599f85f37ae733e564a4bda4e06 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 26 Jul 2022 04:33:19 +0300 Subject: libcamera: yaml_parser: Replace ok flag to get() with std::optional The YamlObject::get() function takes a default value and an optional bool ok flag to handle parsing errors. This ad-hoc mechanism complicates error handling in callers. A better API is possible by dropping the default value and ok flag and returning an std::optional. Not only does it simplify the calls, it also lets callers handle errors through the standard std::optional class instead of the current ad-hoc mechanism. Provide a get() wrapper around std::optional::value_or() to further simplify callers that don't need any specific error handling. Signed-off-by: Laurent Pinchart Reviewed-by: Naushir Patuck Tested-by: Naushir Patuck Reviewed-by: Jacopo Mondi --- test/yaml-parser.cpp | 71 ++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) (limited to 'test') diff --git a/test/yaml-parser.cpp b/test/yaml-parser.cpp index 38f84823..ebb654f2 100644 --- a/test/yaml-parser.cpp +++ b/test/yaml-parser.cpp @@ -148,7 +148,6 @@ protected: } /* Test string object */ - bool ok; auto &strObj = (*root)["string"]; if (strObj.isDictionary()) { @@ -161,27 +160,27 @@ protected: return TestFail; } - if (strObj.get("", &ok) != "libcamera" || !ok) { + if (strObj.get().value_or("") != "libcamera") { cerr << "String object parse as wrong content" << std::endl; return TestFail; } - if (strObj.get(-1, &ok) != -1 || ok) { + if (strObj.get()) { cerr << "String object parse as integer" << std::endl; return TestFail; } - if (strObj.get(1, &ok) != 1 || ok) { + if (strObj.get()) { cerr << "String object parse as unsigned integer" << std::endl; return TestFail; } - if (strObj.get(1.0, &ok) != 1.0 || ok) { + if (strObj.get()) { cerr << "String object parse as double" << std::endl; return TestFail; } - if (strObj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (strObj.get()) { cerr << "String object parse as Size" << std::endl; return TestFail; } @@ -199,27 +198,27 @@ protected: return TestFail; } - if (int32Obj.get(-100, &ok) != -100 || !ok) { + if (int32Obj.get().value_or(0) != -100) { cerr << "Integer object parse as wrong value" << std::endl; return TestFail; } - if (int32Obj.get("", &ok) != "-100" || !ok) { + if (int32Obj.get().value_or("") != "-100") { cerr << "Integer object fail to parse as string" << std::endl; return TestFail; } - if (int32Obj.get(1.0, &ok) != -100.0 || !ok) { + if (int32Obj.get().value_or(0.0) != -100.0) { cerr << "Integer object fail to parse as double" << std::endl; return TestFail; } - if (int32Obj.get(1, &ok) != 1 || ok) { + if (int32Obj.get()) { cerr << "Negative integer object parse as unsigned integer" << std::endl; return TestFail; } - if (int32Obj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (int32Obj.get()) { cerr << "Integer object parse as Size" << std::endl; return TestFail; } @@ -237,27 +236,27 @@ protected: return TestFail; } - if (uint32Obj.get(-1, &ok) != 100 || !ok) { + if (uint32Obj.get().value_or(0) != 100) { cerr << "Unsigned integer object fail to parse as integer" << std::endl; return TestFail; } - if (uint32Obj.get("", &ok) != "100" || !ok) { + if (uint32Obj.get().value_or("") != "100") { cerr << "Unsigned integer object fail to parse as string" << std::endl; return TestFail; } - if (uint32Obj.get(1.0, &ok) != 100.0 || !ok) { + if (uint32Obj.get().value_or(0.0) != 100.0) { cerr << "Unsigned integer object fail to parse as double" << std::endl; return TestFail; } - if (uint32Obj.get(100, &ok) != 100 || !ok) { + if (uint32Obj.get().value_or(0) != 100) { cerr << "Unsigned integer object parsed as wrong value" << std::endl; return TestFail; } - if (uint32Obj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (uint32Obj.get()) { cerr << "Unsigned integer object parsed as Size" << std::endl; return TestFail; } @@ -275,27 +274,27 @@ protected: return TestFail; } - if (doubleObj.get("", &ok) != "3.14159" || !ok) { + if (doubleObj.get().value_or("") != "3.14159") { cerr << "Double object fail to parse as string" << std::endl; return TestFail; } - if (doubleObj.get(1.0, &ok) != 3.14159 || !ok) { + if (doubleObj.get().value_or(0.0) != 3.14159) { cerr << "Double object parse as wrong value" << std::endl; return TestFail; } - if (doubleObj.get(-1, &ok) != -1 || ok) { + if (doubleObj.get()) { cerr << "Double object parse as integer" << std::endl; return TestFail; } - if (doubleObj.get(1, &ok) != 1 || ok) { + if (doubleObj.get()) { cerr << "Double object parse as unsigned integer" << std::endl; return TestFail; } - if (doubleObj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (doubleObj.get()) { cerr << "Double object parse as Size" << std::endl; return TestFail; } @@ -313,27 +312,27 @@ protected: return TestFail; } - if (sizeObj.get("", &ok) != "" || ok) { + if (sizeObj.get()) { cerr << "Size object parse as string" << std::endl; return TestFail; } - if (sizeObj.get(1.0, &ok) != 1.0 || ok) { + if (sizeObj.get()) { cerr << "Size object parse as double" << std::endl; return TestFail; } - if (sizeObj.get(-1, &ok) != -1 || ok) { + if (sizeObj.get()) { cerr << "Size object parse as integer" << std::endl; return TestFail; } - if (sizeObj.get(1, &ok) != 1 || ok) { + if (sizeObj.get()) { cerr << "Size object parse as unsigned integer" << std::endl; return TestFail; } - if (sizeObj.get(Size(0, 0), &ok) != Size(1920, 1080) || !ok) { + if (sizeObj.get().value_or(Size(0, 0)) != Size(1920, 1080)) { cerr << "Size object parse as wrong value" << std::endl; return TestFail; } @@ -351,27 +350,27 @@ protected: return TestFail; } - if (listObj.get("", &ok) != "" || ok) { + if (listObj.get()) { cerr << "List object parse as string" << std::endl; return TestFail; } - if (listObj.get(1.0, &ok) != 1.0 || ok) { + if (listObj.get()) { cerr << "List object parse as double" << std::endl; return TestFail; } - if (listObj.get(-1, &ok) != -1 || ok) { + if (listObj.get()) { cerr << "List object parse as integer" << std::endl; return TestFail; } - if (listObj.get(1, &ok) != 1 || ok) { + if (listObj.get()) { cerr << "List object parse as unsigne integer" << std::endl; return TestFail; } - if (listObj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (listObj.get()) { cerr << "String list object parse as Size" << std::endl; return TestFail; } @@ -424,27 +423,27 @@ protected: return TestFail; } - if (dictObj.get("", &ok) != "" || ok) { + if (dictObj.get()) { cerr << "Dictionary object parse as string" << std::endl; return TestFail; } - if (dictObj.get(1.0, &ok) != 1.0 || ok) { + if (dictObj.get()) { cerr << "Dictionary object parse as double" << std::endl; return TestFail; } - if (dictObj.get(-1, &ok) != -1 || ok) { + if (dictObj.get()) { cerr << "Dictionary object parse as integer" << std::endl; return TestFail; } - if (dictObj.get(1, &ok) != 1 || ok) { + if (dictObj.get()) { cerr << "Dictionary object parse as unsigned integer" << std::endl; return TestFail; } - if (dictObj.get(Size(0, 0), &ok) != Size(0, 0) || ok) { + if (dictObj.get()) { cerr << "Dictionary object parse as Size" << std::endl; return TestFail; } -- cgit v1.2.1