blob: 2216bbbf095158f778f8fa78160c7f92cc5b97cd [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5#pragma once
6
7#include "IGraphObservable.hpp"
8#include "Graph.hpp"
9
10namespace armnn
11{
12
13template <typename ObservedType>
14class GraphObservable : public IGraphObservable
15{
16public:
17 using Iterator = typename std::list<ObservedType>::const_iterator;
18
19 GraphObservable(Graph& subject, GraphEvent notifyOnEvent)
20 : m_Subject(&subject)
21 {
22 m_NotifyOnEvent = notifyOnEvent;
23 m_Subject->AttachObservable(this, m_NotifyOnEvent);
24 };
25
26 void Clear() { m_ObservedObjects.clear(); };
27
28 Iterator begin() { return m_ObservedObjects.begin(); }
29
30 Iterator end() { return m_ObservedObjects.end(); }
31
32protected:
33 ~GraphObservable()
34 {
35 if (m_Subject)
36 {
37 m_Subject->DetachObservable(this, m_NotifyOnEvent);
38 }
39 }
40
41 GraphEvent m_NotifyOnEvent;
42 Graph* m_Subject;
43 std::list<ObservedType> m_ObservedObjects;
44};
45
46class AddedLayerObservable : public GraphObservable<Layer*>
47{
48public:
49 explicit AddedLayerObservable(Graph& subject)
50 : GraphObservable<Layer*>(subject, GraphEvent::LayerAdded)
51 {};
52
53 void Update(Layer* graphLayer) override;
54};
55
56class ErasedLayerNamesObservable : public GraphObservable<std::string>
57{
58public:
59 explicit ErasedLayerNamesObservable(Graph& subject)
60 : GraphObservable<std::string>(subject, GraphEvent::LayerErased)
61 {};
62
63 void Update(Layer* graphLayer) override;
64};
65
66} //namespace armnn
67