From 75f13e18909875a09ce2ff271c42be768e790598 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 14 Dec 2020 14:23:54 +0100
Subject: [PATCH] ENH: expose fileOperation::sortTimes as public

---
 .../fileOperation/fileOperation.C             | 85 ++++++++++---------
 .../fileOperation/fileOperation.H             | 14 ++-
 2 files changed, 57 insertions(+), 42 deletions(-)

diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
index fa5345096d7..99a5ca1af36 100644
--- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
+++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.C
@@ -179,63 +179,51 @@ static bool parseProcsNumRange
 } // End anonymous namespace
 
 
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-Foam::fileMonitor& Foam::fileOperation::monitor() const
-{
-    if (!monitorPtr_)
-    {
-        monitorPtr_.reset
-        (
-            new fileMonitor
-            (
-                regIOobject::fileModificationChecking == IOobject::inotify
-             || regIOobject::fileModificationChecking == IOobject::inotifyMaster
-            )
-        );
-    }
-    return *monitorPtr_;
-}
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
 
-
-Foam::instantList Foam::fileOperation::sortTimes
+Foam::instantList
+Foam::fileOperation::sortTimes
 (
-    const fileNameList& dirNames,
+    const fileNameList& dirEntries,
     const word& constantName
 )
 {
-    // Initialise instant list
-    instantList times(dirNames.size() + 1);
-    label nTimes = 0;
-
     // Check for "constant"
     bool haveConstant = false;
-    for (const fileName& dirName : dirNames)
+
+    if (!constantName.empty())
     {
-        if (dirName == constantName)
+        for (const fileName& dirName : dirEntries)
         {
-            haveConstant = true;
-            times[nTimes].value() = 0;
-            times[nTimes].name() = constantName;
-            ++nTimes;
-            break;
+            if (dirName == constantName)
+            {
+                haveConstant = true;
+                break;
+            }
         }
     }
 
-    // Read and parse all the entries in the directory
-    for (const fileName& dirName : dirNames)
+    instantList times(dirEntries.size() + 1);
+    label nTimes = 0;
+
+    if (haveConstant)
     {
-        scalar timeValue;
-        if (readScalar(dirName, timeValue))
+        times[nTimes].value() = 0;
+        times[nTimes].name() = constantName;
+        ++nTimes;
+    }
+
+    // Parse directory entries for scalar values
+    for (const fileName& dirName : dirEntries)
+    {
+        if (readScalar(dirName, times[nTimes].value()))
         {
-            times[nTimes].value() = timeValue;
             times[nTimes].name() = dirName;
             ++nTimes;
         }
     }
 
-    // Reset the length of the times list
-    times.setSize(nTimes);
+    times.resize(nTimes);
 
     if (haveConstant)
     {
@@ -246,13 +234,32 @@ Foam::instantList Foam::fileOperation::sortTimes
     }
     else if (nTimes > 1)
     {
-        std::sort(&times[0], times.end(), instant::less());
+        std::sort(times.begin(), times.end(), instant::less());
     }
 
     return times;
 }
 
 
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+Foam::fileMonitor& Foam::fileOperation::monitor() const
+{
+    if (!monitorPtr_)
+    {
+        monitorPtr_.reset
+        (
+            new fileMonitor
+            (
+                regIOobject::fileModificationChecking == IOobject::inotify
+             || regIOobject::fileModificationChecking == IOobject::inotifyMaster
+            )
+        );
+    }
+    return *monitorPtr_;
+}
+
+
 void Foam::fileOperation::mergeTimes
 (
     const instantList& extraTimes,
diff --git a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
index 7fa6fb93487..412c22ef866 100644
--- a/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
+++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperation.H
@@ -131,9 +131,6 @@ protected:
         //- Get or create fileMonitor singleton
         fileMonitor& monitor() const;
 
-        //- Sort directory entries according to time value
-        static instantList sortTimes(const fileNameList&, const word&);
-
         //- Merge two times
         static void mergeTimes
         (
@@ -225,6 +222,17 @@ public:
     virtual ~fileOperation() = default;
 
 
+   // Static Functions
+
+        //- Sort directory entries according to time value,
+        //  with "constant" appearing first (if it exists)
+        static instantList sortTimes
+        (
+            const fileNameList& dirEntries,
+            const word& constantName = "constant"
+        );
+
+
     // Member Functions
 
         //- Distributed roots (parallel run)
-- 
GitLab