Functions to add nodes and regs to IsolationChip class

Change-Id: I3361f23f795b9015235add237bf5a78bd8afa861
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
index 4fabea1..cb41353 100644
--- a/src/isolator/hei_isolation_chip.hpp
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -2,6 +2,7 @@
 
 #include <hei_isolation_data.hpp>
 #include <isolator/hei_isolation_node.hpp>
+#include <register/hei_hardware_register.hpp>
 
 namespace libhei
 {
@@ -46,6 +47,14 @@
     /** This chip's type. */
     const ChipType_t iv_chipType;
 
+    /** All hardware registers for this chip type. */
+    using RegisterKey_t = std::pair<RegisterId_t, Instance_t>;
+    std::map<RegisterKey_t, const HardwareRegisterPtr> iv_regs;
+
+    /** All isolation nodes for this chip type. */
+    using NodeKey_t = std::pair<NodeId_t, Instance_t>;
+    std::map<NodeKey_t, const IsolationNodePtr> iv_nodes;
+
     /** Root nodes for this chip type. */
     std::map<AttentionType_t, const IsolationNodePtr> iv_rootNodes;
 
@@ -68,16 +77,46 @@
     }
 
     /**
+     * @brief Adds a hardware register to this chip.
+     * @param i_hwReg The target hardware register. Will assert that a different
+     *                register with the same ID and instance does not exist.
+     */
+    void addHardwareRegister(HardwareRegisterPtr i_hwReg);
+
+    /**
+     * @brief Adds an isolation node to this chip.
+     * @param i_isoNode The target isolation node. Will assert that a different
+     *                  node with the same ID and instance does not exist.
+     */
+    void addIsolationNode(IsolationNodePtr i_isoNode);
+
+    /**
      * @brief Adds a root node to this chip.
      * @param i_attnType The target attention type. Will assert this type does
      *                   not already exist in iv_rootNodes.
-     * @param i_node     The target isolation node for this attention type.
+     * @param i_rootNode The target isolation node for this attention type.
      */
-    void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_node)
-    {
-        auto ret = iv_rootNodes.emplace(i_attnType, i_node);
-        HEI_ASSERT(ret.second); // Should have not already existed.
-    }
+    void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_rootNode);
+
+    /**
+     * @brief  Retrieves a hardware register from this chip, if it exists.
+     * @param  i_regId   The register ID.
+     * @param  i_regInst The register instance.
+     * @return The target hardware register. Will assert that the target
+     *         register exists in iv_regs.
+     */
+    HardwareRegisterPtr getHardwareRegister(RegisterId_t i_regId,
+                                            Instance_t i_regInst) const;
+
+    /**
+     * @brief  Retrieves an isolation node from this chip, if it exists.
+     * @param  i_nodeId   The node ID.
+     * @param  i_nodeInst The node instance.
+     * @return The target isolation node. Will assert that the target node
+     *         exists in iv_nodes.
+     */
+    IsolationNodePtr getIsolationNode(NodeId_t i_nodeId,
+                                      Instance_t i_nodeInst) const;
 };
 
 /** A simple map to ensure only one IsolationChip exists per chip type. */