IVGCVSW-3432 Create CaptureData Holder

 * Create CaptureData and Holder classes
 * Add unit test

Signed-off-by: Ellen Norris-Thompson <ellen.norris-thompson@arm.com>
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Change-Id: I9f2766a8a6081ae4f9988904af2ca24cd434ebca
diff --git a/src/profiling/Holder.hpp b/src/profiling/Holder.hpp
new file mode 100644
index 0000000..c22c72a
--- /dev/null
+++ b/src/profiling/Holder.hpp
@@ -0,0 +1,53 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <mutex>
+#include <vector>
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+class CaptureData
+{
+public:
+    CaptureData()
+        : m_CapturePeriod(0), m_CounterIds() {};
+    CaptureData(uint32_t capturePeriod, std::vector<uint16_t>& counterIds)
+        : m_CapturePeriod(capturePeriod), m_CounterIds(counterIds) {};
+    CaptureData(const CaptureData& captureData)
+        : m_CapturePeriod(captureData.m_CapturePeriod), m_CounterIds(captureData.m_CounterIds) {};
+
+    CaptureData& operator= (const CaptureData& captureData);
+
+    void SetCapturePeriod(uint32_t capturePeriod);
+    void SetCounterIds(std::vector<uint16_t>& counterIds);
+    uint32_t GetCapturePeriod() const;
+    std::vector<uint16_t> GetCounterIds() const;
+
+private:
+    uint32_t m_CapturePeriod;
+    std::vector<uint16_t> m_CounterIds;
+};
+
+class Holder
+{
+public:
+    Holder()
+        : m_CaptureData() {};
+    CaptureData GetCaptureData() const;
+    void SetCaptureData(uint32_t capturePeriod, std::vector<uint16_t>& counterIds);
+
+private:
+    mutable std::mutex m_CaptureThreadMutex;
+    CaptureData m_CaptureData;
+};
+
+} // namespace profiling
+
+} // namespace armnn