diff options
Diffstat (limited to 'src/count.hpp')
-rw-r--r-- | src/count.hpp | 127 |
1 files changed, 61 insertions, 66 deletions
diff --git a/src/count.hpp b/src/count.hpp index 9f0ce3e..af3998a 100644 --- a/src/count.hpp +++ b/src/count.hpp @@ -31,82 +31,77 @@ namespace monitoring * If the oneshot parameter is true, then this condition won't pass * again until it fails at least once. */ -template <typename T> -class CountCondition : public IndexedConditional +template <typename T> class CountCondition : public IndexedConditional { - public: - CountCondition() = delete; - CountCondition(const CountCondition&) = default; - CountCondition(CountCondition&&) = default; - CountCondition& operator=(const CountCondition&) = default; - CountCondition& operator=(CountCondition&&) = default; - ~CountCondition() = default; + public: + CountCondition() = delete; + CountCondition(const CountCondition&) = default; + CountCondition(CountCondition&&) = default; + CountCondition& operator=(const CountCondition&) = default; + CountCondition& operator=(CountCondition&&) = default; + ~CountCondition() = default; - CountCondition( - const PropertyIndex& conditionIndex, - const std::function<bool(size_t)>& _countOp, - const std::function<bool(T)>& _propertyOp, - bool oneshot = false) : - IndexedConditional(conditionIndex), - countOp(_countOp), - propertyOp(_propertyOp), - oneshot(oneshot) {} + CountCondition(const PropertyIndex& conditionIndex, + const std::function<bool(size_t)>& _countOp, + const std::function<bool(T)>& _propertyOp, + bool oneshot = false) : + IndexedConditional(conditionIndex), + countOp(_countOp), propertyOp(_propertyOp), oneshot(oneshot) + { + } - bool operator()() override - { - // Count the number of properties in the index that - // pass the condition specified in the config file. - auto count = std::count_if( - index.cbegin(), - index.cend(), - [this](const auto & item) + bool operator()() override + { + // Count the number of properties in the index that + // pass the condition specified in the config file. + auto count = std::count_if( + index.cbegin(), index.cend(), + [this](const auto& item) // *INDENT-OFF* - { - //Get the property value from storage[0], - //and save the op result in storage[1]. - const auto& storage = std::get<storageIndex>( - item.second); - // Don't count properties that don't exist. - if (std::get<valueIndex>( - storage.get()).empty()) - { - return false; - } - const auto& value = any_ns::any_cast<T>( - std::get<valueIndex>(storage.get())); - auto r = propertyOp(value); - - std::get<resultIndex>(storage.get()) = r; + { + // Get the property value from storage[0], + // and save the op result in storage[1]. + const auto& storage = std::get<storageIndex>(item.second); + // Don't count properties that don't exist. + if (std::get<valueIndex>(storage.get()).empty()) + { + return false; + } + const auto& value = + any_ns::any_cast<T>(std::get<valueIndex>(storage.get())); + auto r = propertyOp(value); - return r; - }); - // *INDENT-ON* + std::get<resultIndex>(storage.get()) = r; - // Now apply the count condition to the count. - auto result = countOp(count); + return r; + }); + // *INDENT-ON* - // If this was a oneshot and the the condition has already - // passed, then don't let it pass again until the condition - // has gone back to false. - if (oneshot && result && lastResult) - { - return false; - } + // Now apply the count condition to the count. + auto result = countOp(count); - lastResult = result; - return result; + // If this was a oneshot and the the condition has already + // passed, then don't let it pass again until the condition + // has gone back to false. + if (oneshot && result && lastResult) + { + return false; } - private: - /** @brief The comparison to perform on the count. */ - std::function<bool(size_t)> countOp; - /** @brief The comparison to perform on each property. */ - std::function<bool(T)> propertyOp; - /** @brief If the condition can be allowed to pass again - on subsequent checks that are also true. */ - const bool oneshot; - /** @brief The result of the previous check. */ - bool lastResult = false; + lastResult = result; + return result; + } + + private: + /** @brief The comparison to perform on the count. */ + std::function<bool(size_t)> countOp; + /** @brief The comparison to perform on each property. */ + std::function<bool(T)> propertyOp; + /** @brief If the condition can be allowed to pass again + on subsequent checks that are also true. */ + const bool oneshot; + /** @brief The result of the previous check. */ + bool lastResult = false; }; } // namespace monitoring } // namespace dbus |