Created IsolationChip class

Change-Id: I8c95713303f730c1ee6aa289154be47fc66639db
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
new file mode 100644
index 0000000..6930955
--- /dev/null
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+#include <hei_isolation_data.hpp>
+#include <isolator/hei_isolation_node.hpp>
+
+namespace libhei
+{
+
+/**
+ * @brief This class contains all information required to isolate attentions on
+ *        a specific chip type.
+ *
+ * The primary function of this class is analyze(), which will do a depth-first
+ * search of the hardware attention reporting tree structure (characterized by
+ * IsolationNode objects) to find all active attentions on a chip.
+ *
+ * The data for each chip type is built from information in the Chip Data Files.
+ *
+ *  IMPORTANT:
+ *   Most of the objects created and referenced by this class are stored in the
+ *   flyweight factories, which are used as a space saving mechanism by
+ *   preventing duplicate object creation. For example, a large set of the
+ *   registers for a specific chip model will likely be common between each of
+ *   chip level of that model. It is not necessary to create new objects for
+ *   each level when the attributes are all the same. Because the flyweights are
+ *   used, it is not possible to remove all of the data for a specific chip
+ *   model/level be deleting an IsolationChip object. Instead, you must call the
+ *   main uninitialize() function and clear all data for all objects.
+ */
+class IsolationChip
+{
+  public: // Constructors, destructor, assignment
+    /** @brief Default constructor. */
+    IsolationChip(ChipType_t i_chipType, const RootNodeMap& i_rootNodes) :
+        iv_chipType(i_chipType), iv_rootNodes(i_rootNodes)
+    {}
+
+    /** @brief Destructor. */
+    ~IsolationChip() = default;
+
+    /** @brief Copy constructor. */
+    IsolationChip(const IsolationChip&) = delete;
+
+    /** @brief Assignment operator. */
+    IsolationChip& operator=(const IsolationChip&) = delete;
+
+  private: // Instance variables
+    /** This chip's type. */
+    const ChipType_t iv_chipType;
+
+    /** Root nodes for this chip type. */
+    const RootNodeMap iv_rootNodes;
+
+  public: // Member functions
+    /**
+     * @brief  Finds all active attentions on this chip.
+     * @param  i_chip     The target chip for isolation. Will assert the given
+     *                    chip type matches iv_chipType.
+     * @param  io_isoData The isolation data returned back to the user
+     *                    application.
+     * @return True, if any active attentions found on this chip.
+     *         False, otherwise.
+     */
+    bool analyze(const Chip& i_chip, IsolationData& io_isoData) const;
+
+    /** @brief Chip type accessor. */
+    ChipType_t getChipType() const
+    {
+        return iv_chipType;
+    }
+};
+
+} // end namespace libhei