pseq: Create System class

Create a C++ System class that corresponds to the entire system being
controlled by the BMC.

Eventually more function will be added to this class, but for the
initial version only implement the required support for storing the
chassis objects from the JSON config file.

Create automated test cases for the new class.

Tested:
* Ran automated test cases.

Change-Id: I90b05acb3d17558b4b518c88b45d3d5825165a2a
Signed-off-by: Shawn McCarney <shawnmm@us.ibm.com>
diff --git a/phosphor-power-sequencer/src/system.hpp b/phosphor-power-sequencer/src/system.hpp
new file mode 100644
index 0000000..0ae8e62
--- /dev/null
+++ b/phosphor-power-sequencer/src/system.hpp
@@ -0,0 +1,71 @@
+/**
+ * Copyright © 2025 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "chassis.hpp"
+
+#include <memory>
+#include <utility>
+#include <vector>
+
+namespace phosphor::power::sequencer
+{
+
+/**
+ * @class System
+ *
+ * The computer system being controlled and monitored by the BMC.
+ *
+ * The system contains one or more chassis.
+ */
+class System
+{
+  public:
+    // Specify which compiler-generated methods we want
+    System() = delete;
+    System(const System&) = delete;
+    System(System&&) = delete;
+    System& operator=(const System&) = delete;
+    System& operator=(System&&) = delete;
+    ~System() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param chassis Chassis in the system
+     */
+    explicit System(std::vector<std::unique_ptr<Chassis>> chassis) :
+        chassis{std::move(chassis)}
+    {}
+
+    /**
+     * Returns the chassis in the system.
+     *
+     * @return chassis
+     */
+    const std::vector<std::unique_ptr<Chassis>>& getChassis() const
+    {
+        return chassis;
+    }
+
+  private:
+    /**
+     * Chassis in the system.
+     */
+    std::vector<std::unique_ptr<Chassis>> chassis{};
+};
+
+} // namespace phosphor::power::sequencer