aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Observable.hpp
diff options
context:
space:
mode:
authortelsoa01 <telmo.soares@arm.com>2018-08-31 09:22:23 +0100
committertelsoa01 <telmo.soares@arm.com>2018-08-31 09:22:23 +0100
commitc577f2c6a3b4ddb6ba87a882723c53a248afbeba (patch)
treebd7d4c148df27f8be6649d313efb24f536b7cf34 /src/armnn/Observable.hpp
parent4c7098bfeab1ffe1cdc77f6c15548d3e73274746 (diff)
downloadarmnn-c577f2c6a3b4ddb6ba87a882723c53a248afbeba.tar.gz
Release 18.08
Diffstat (limited to 'src/armnn/Observable.hpp')
-rw-r--r--src/armnn/Observable.hpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/armnn/Observable.hpp b/src/armnn/Observable.hpp
new file mode 100644
index 0000000000..8f33c0b3e3
--- /dev/null
+++ b/src/armnn/Observable.hpp
@@ -0,0 +1,67 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// See LICENSE file in the project root for full license information.
+//
+#pragma once
+
+#include "IGraphObservable.hpp"
+#include "Graph.hpp"
+
+namespace armnn
+{
+
+template <typename ObservedType>
+class GraphObservable : public IGraphObservable
+{
+public:
+ using Iterator = typename std::list<ObservedType>::const_iterator;
+
+ GraphObservable(Graph& subject, GraphEvent notifyOnEvent)
+ : m_Subject(&subject)
+ {
+ m_NotifyOnEvent = notifyOnEvent;
+ m_Subject->AttachObservable(this, m_NotifyOnEvent);
+ };
+
+ void Clear() { m_ObservedObjects.clear(); };
+
+ Iterator begin() { return m_ObservedObjects.begin(); }
+
+ Iterator end() { return m_ObservedObjects.end(); }
+
+protected:
+ ~GraphObservable()
+ {
+ if (m_Subject)
+ {
+ m_Subject->DetachObservable(this, m_NotifyOnEvent);
+ }
+ }
+
+ GraphEvent m_NotifyOnEvent;
+ Graph* m_Subject;
+ std::list<ObservedType> m_ObservedObjects;
+};
+
+class AddedLayerObservable : public GraphObservable<Layer*>
+{
+public:
+ explicit AddedLayerObservable(Graph& subject)
+ : GraphObservable<Layer*>(subject, GraphEvent::LayerAdded)
+ {};
+
+ void Update(Layer* graphLayer) override;
+};
+
+class ErasedLayerNamesObservable : public GraphObservable<std::string>
+{
+public:
+ explicit ErasedLayerNamesObservable(Graph& subject)
+ : GraphObservable<std::string>(subject, GraphEvent::LayerErased)
+ {};
+
+ void Update(Layer* graphLayer) override;
+};
+
+} //namespace armnn
+