utility to transform an FFDCFile list for PEL consumption

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: Iae1bc8ed1a1eea9f9d7593e59c21a861a8236a34
diff --git a/attn/attn_logging.cpp b/attn/attn_logging.cpp
index 014fc96..3bdf1c2 100644
--- a/attn/attn_logging.cpp
+++ b/attn/attn_logging.cpp
@@ -60,7 +60,8 @@
         std::vector<util::FFDCFile> files{createFFDCFiles()};
 
         // Create FFDC tuples used to pass FFDC files to D-Bus method
-        std::vector<FFDCTuple> ffdcTuples{createFFDCTuples(files)};
+        std::vector<util::FFDCTuple> ffdcTuples{};
+        util::transformFFDC(files, ffdcTuples);
 
         // attach additional data
         method.append(eventName,
@@ -288,17 +289,4 @@
     return files;
 }
 
-/** create tuples of FFDC files */
-std::vector<FFDCTuple> createFFDCTuples(std::vector<util::FFDCFile>& files)
-{
-    std::vector<FFDCTuple> ffdcTuples{};
-    for (util::FFDCFile& file : files)
-    {
-        ffdcTuples.emplace_back(
-            file.getFormat(), file.getSubType(), file.getVersion(),
-            sdbusplus::message::unix_fd(file.getFileDescriptor()));
-    }
-    return ffdcTuples;
-}
-
 } // namespace attn
diff --git a/attn/attn_logging.hpp b/attn/attn_logging.hpp
index 8b5feba..659048c 100644
--- a/attn/attn_logging.hpp
+++ b/attn/attn_logging.hpp
@@ -48,9 +48,6 @@
 /** @brief commit attention handler failure event to log */
 void eventAttentionFail(int i_error);
 
-using FFDCTuple =
-    std::tuple<util::FFDCFormat, uint8_t, uint8_t, sdbusplus::message::unix_fd>;
-
 /**
  * Create an FFDCFile object containing the specified lines of text data.
  *
@@ -72,15 +69,4 @@
  */
 std::vector<util::FFDCFile> createFFDCFiles();
 
-/**
- * Create FFDCTuple objects corresponding to the specified FFDC files.
- *
- * The D-Bus method to create an error log requires a vector of tuples to
- * pass in the FFDC file information.
- *
- * @param files FFDC files
- * @return vector of FFDCTuple objects
- */
-std::vector<FFDCTuple> createFFDCTuples(std::vector<util::FFDCFile>& files);
-
 } // namespace attn
diff --git a/util/ffdc_file.hpp b/util/ffdc_file.hpp
index f23fddd..6f71e2a 100644
--- a/util/ffdc_file.hpp
+++ b/util/ffdc_file.hpp
@@ -65,7 +65,7 @@
      *
      * @return file descriptor
      */
-    int getFileDescriptor()
+    int getFileDescriptor() const
     {
         // Return the integer file descriptor within the FileDescriptor object
         return descriptor();
@@ -153,4 +153,21 @@
     FileDescriptor descriptor{};
 };
 
+using FFDCTuple =
+    std::tuple<FFDCFormat, uint8_t, uint8_t, sdbusplus::message::unix_fd>;
+
+/** Transforms a list of FFDC files to a list of FFDC tuples. */
+inline void transformFFDC(const std::vector<FFDCFile>& i_files,
+                          std::vector<FFDCTuple>& o_tuples)
+{
+    o_tuples.clear();
+
+    std::transform(i_files.begin(), i_files.end(), o_tuples.begin(),
+                   [](const auto& e) {
+                       return FFDCTuple(
+                           e.getFormat(), e.getSubType(), e.getVersion(),
+                           sdbusplus::message::unix_fd(e.getFileDescriptor()));
+                   });
+}
+
 } // namespace util
diff --git a/util/file_descriptor.hpp b/util/file_descriptor.hpp
index 51c125e..425a2bb 100644
--- a/util/file_descriptor.hpp
+++ b/util/file_descriptor.hpp
@@ -77,7 +77,7 @@
      * @return File descriptor.  Returns -1 if this object does not contain an
      *         open file descriptor.
      */
-    int operator()()
+    int operator()() const
     {
         return fd;
     }