Introduce CachedParsedProperty, CachedBoolProperty.
Add helper classes for CachedProperty that cache the results of parsing
property values.
Test: libbase_test on x86_64 emulator
Change-Id: I48513acedc7f375d1c675c90033a5b5b975ec4d1
diff --git a/properties.cpp b/properties.cpp
index 7e851e6..a20db54 100644
--- a/properties.cpp
+++ b/properties.cpp
@@ -299,6 +299,27 @@
return Get(nullptr);
}
+CachedBoolProperty::CachedBoolProperty(std::string property_name)
+ : cached_parsed_property_(std::move(property_name),
+ [](const char* value) -> std::optional<bool> {
+ switch (ParseBool(value)) {
+ case ParseBoolResult::kError:
+ return std::nullopt;
+ case ParseBoolResult::kFalse:
+ return false;
+ case ParseBoolResult::kTrue:
+ return true;
+ }
+ }) {}
+
+std::optional<bool> CachedBoolProperty::GetOptional() {
+ return cached_parsed_property_.Get();
+}
+
+bool CachedBoolProperty::Get(bool default_value) {
+ return GetOptional().value_or(default_value);
+}
+
#endif
} // namespace base