cleanup: Move probe and scan into their own files

Moving the code into separate files and grouping them by namespace
improves 'separation of concern'. Increases maintainability.

Tested:
Changes have been tested in QEMU/Yosemite35 machine with Yosemite4
Image and adapted configfile, where Probe statement set to true.
Service runs and places the information in the inventory

```
root@yosemite4:~# busctl tree xyz.openbmc_project.EntityManager
`- /xyz
  `- /xyz/openbmc_project
    |- /xyz/openbmc_project/EntityManager
    `- /xyz/openbmc_project/inventory
      `- /xyz/openbmc_project/inventory/system
        `- /xyz/openbmc_project/inventory/system/board
          `- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/All_Fan
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P0V6_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P12V_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V0_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V2_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P1V8_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P2V5_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V3_RGM_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V3_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P3V_BAT_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P5V_USB_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_ADC_P5V_VOLT_V
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/MGNT_TEMP_C
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/PID_NIC_TEMP
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_MGNT_TEMP
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_NIC_TEMP
            |- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Stepwise_SENTINEL_DOME_SLOT_PRESENT_PERCENTAGE
            `- /xyz/openbmc_project/inventory/system/board/Yosemite_4_Management_Board/Zone_1
```

Change-Id: I0ae0cb14b054ac1a964c5a8e1164811384a4f31b
Signed-off-by: Christopher Meis <christopher.meis@9elements.com>
diff --git a/src/perform_probe.cpp b/src/perform_probe.cpp
index c88ed5a..d7dcd8a 100644
--- a/src/perform_probe.cpp
+++ b/src/perform_probe.cpp
@@ -14,7 +14,10 @@
 // limitations under the License.
 */
 /// \file perform_probe.cpp
+#include "perform_probe.hpp"
+
 #include "entity_manager.hpp"
+#include "perform_scan.hpp"
 
 #include <boost/algorithm/string/replace.hpp>
 #include <phosphor-logging/lg2.hpp>
@@ -26,8 +29,8 @@
 // When an interface passes a probe, also save its D-Bus path with it.
 bool probeDbus(const std::string& interfaceName,
                const std::map<std::string, nlohmann::json>& matches,
-               FoundDevices& devices, const std::shared_ptr<PerformScan>& scan,
-               bool& foundProbe)
+               scan::FoundDevices& devices,
+               const std::shared_ptr<scan::PerformScan>& scan, bool& foundProbe)
 {
     bool foundMatch = false;
     foundProbe = false;
@@ -73,35 +76,36 @@
 
 // default probe entry point, iterates a list looking for specific types to
 // call specific probe functions
-bool probe(const std::vector<std::string>& probeCommand,
-           const std::shared_ptr<PerformScan>& scan, FoundDevices& foundDevs)
+bool doProbe(const std::vector<std::string>& probeCommand,
+             const std::shared_ptr<scan::PerformScan>& scan,
+             scan::FoundDevices& foundDevs)
 {
     const static std::regex command(R"(\((.*)\))");
     std::smatch match;
     bool ret = false;
     bool matchOne = false;
     bool cur = true;
-    probe_type_codes lastCommand = probe_type_codes::FALSE_T;
+    probe::probe_type_codes lastCommand = probe::probe_type_codes::FALSE_T;
     bool first = true;
 
     for (const auto& probe : probeCommand)
     {
-        FoundProbeTypeT probeType = findProbeType(probe);
+        probe::FoundProbeTypeT probeType = probe::findProbeType(probe);
         if (probeType)
         {
             switch ((*probeType)->second)
             {
-                case probe_type_codes::FALSE_T:
+                case probe::probe_type_codes::FALSE_T:
                 {
                     cur = false;
                     break;
                 }
-                case probe_type_codes::TRUE_T:
+                case probe::probe_type_codes::TRUE_T:
                 {
                     cur = true;
                     break;
                 }
-                case probe_type_codes::MATCH_ONE:
+                case probe::probe_type_codes::MATCH_ONE:
                 {
                     // set current value to last, this probe type shouldn't
                     // affect the outcome
@@ -109,13 +113,13 @@
                     matchOne = true;
                     break;
                 }
-                /*case probe_type_codes::AND:
+                /*case probe::probe_type_codes::AND:
                   break;
-                case probe_type_codes::OR:
+                case probe::probe_type_codes::OR:
                   break;
                   // these are no-ops until the last command switch
                   */
-                case probe_type_codes::FOUND:
+                case probe::probe_type_codes::FOUND:
                 {
                     if (!std::regex_search(probe, match, command))
                     {
@@ -171,11 +175,11 @@
 
         // some functions like AND and OR only take affect after the
         // fact
-        if (lastCommand == probe_type_codes::AND)
+        if (lastCommand == probe::probe_type_codes::AND)
         {
             ret = cur && ret;
         }
-        else if (lastCommand == probe_type_codes::OR)
+        else if (lastCommand == probe::probe_type_codes::OR)
         {
             ret = cur || ret;
         }
@@ -186,7 +190,7 @@
             first = false;
         }
         lastCommand = probeType ? (*probeType)->second
-                                : probe_type_codes::FALSE_T;
+                                : probe::probe_type_codes::FALSE_T;
     }
 
     // probe passed, but empty device
@@ -207,18 +211,48 @@
     return ret;
 }
 
+namespace probe
+{
+
 PerformProbe::PerformProbe(nlohmann::json& recordRef,
                            const std::vector<std::string>& probeCommand,
                            std::string probeName,
-                           std::shared_ptr<PerformScan>& scanPtr) :
+                           std::shared_ptr<scan::PerformScan>& scanPtr) :
     recordRef(recordRef), _probeCommand(probeCommand),
     probeName(std::move(probeName)), scan(scanPtr)
 {}
+
 PerformProbe::~PerformProbe()
 {
-    FoundDevices foundDevs;
-    if (probe(_probeCommand, scan, foundDevs))
+    scan::FoundDevices foundDevs;
+    if (doProbe(_probeCommand, scan, foundDevs))
     {
         scan->updateSystemConfiguration(recordRef, probeName, foundDevs);
     }
 }
+
+FoundProbeTypeT findProbeType(const std::string& probe)
+{
+    const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
+        probeTypes{{{"FALSE", probe_type_codes::FALSE_T},
+                    {"TRUE", probe_type_codes::TRUE_T},
+                    {"AND", probe_type_codes::AND},
+                    {"OR", probe_type_codes::OR},
+                    {"FOUND", probe_type_codes::FOUND},
+                    {"MATCH_ONE", probe_type_codes::MATCH_ONE}}};
+
+    boost::container::flat_map<const char*, probe_type_codes,
+                               CmpStr>::const_iterator probeType;
+    for (probeType = probeTypes.begin(); probeType != probeTypes.end();
+         ++probeType)
+    {
+        if (probe.find(probeType->first) != std::string::npos)
+        {
+            return probeType;
+        }
+    }
+
+    return std::nullopt;
+}
+
+} // namespace probe