summaryrefslogtreecommitdiffstats
path: root/src/count.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/count.hpp')
-rw-r--r--src/count.hpp127
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
OpenPOWER on IntegriCloud