PEL: Run a user defined function on every PEL
Add a for_each() function to the PEL repository that takes a user
defined function that will be run on every PEL, unless that function
says to stop early.
The user defined function is a std::function<bool>(const PEL&);
For example, to save up to 100 IDs in the repo into a vector:
std::vector<uint32_t> ids;
ForEachFunc f = [&ids](const PEL& pel) {
ids.push_back(pel.id());
return ids.size() == 100 ? true : false;
};
repo.for_each(f);
This will be used to find which PELs still need to be sent up to the
host after a reboot, among other things.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Ic60525a8ab3dd593ba37e43a6cb0b3db8dda7cee
diff --git a/extensions/openpower-pels/repository.hpp b/extensions/openpower-pels/repository.hpp
index d153400..a1d4a24 100644
--- a/extensions/openpower-pels/repository.hpp
+++ b/extensions/openpower-pels/repository.hpp
@@ -148,6 +148,26 @@
*/
std::optional<std::vector<uint8_t>> getPELData(const LogID& id);
+ using ForEachFunc = std::function<bool(const PEL&)>;
+
+ /**
+ * @brief Run a user defined function on every PEL in the repository.
+ *
+ * ForEachFunc takes a const PEL reference, and should return
+ * true to stop iterating and return out of for_each.
+ *
+ * For example, to save up to 100 IDs in the repo into a vector:
+ *
+ * std::vector<uint32_t> ids;
+ * ForEachFunc f = [&ids](const PEL& pel) {
+ * ids.push_back(pel.id());
+ * return ids.size() == 100 ? true : false;
+ * };
+ *
+ * @param[in] func - The function to run.
+ */
+ void for_each(ForEachFunc func) const;
+
private:
/**
* @brief Finds an entry in the _idsToPELs map.