xref: /aosp_15_r20/external/armnn/src/armnn/Observable.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include "IGraphObservable.hpp"
8 #include "Graph.hpp"
9 
10 namespace armnn
11 {
12 
13 template <typename ObservedType>
14 class GraphObservable : public IGraphObservable
15 {
16 public:
17     using Iterator = typename std::list<ObservedType>::const_iterator;
18 
GraphObservable(Graph & subject,GraphEvent notifyOnEvent)19     GraphObservable(Graph& subject, GraphEvent notifyOnEvent)
20     : m_Subject(&subject)
21     {
22         m_NotifyOnEvent = notifyOnEvent;
23         m_Subject->AttachObservable(this, m_NotifyOnEvent);
24     };
25 
Clear()26     void Clear() { m_ObservedObjects.clear(); };
27 
begin()28     Iterator begin() { return m_ObservedObjects.begin(); }
29 
end()30     Iterator end() { return m_ObservedObjects.end(); }
31 
32 protected:
~GraphObservable()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 
46 class AddedLayerObservable : public GraphObservable<Layer*>
47 {
48 public:
AddedLayerObservable(Graph & subject)49     explicit AddedLayerObservable(Graph& subject)
50     : GraphObservable<Layer*>(subject, GraphEvent::LayerAdded)
51     {};
52 
53     void Update(Layer* graphLayer) override;
54 };
55 
56 class ErasedLayerNamesObservable : public GraphObservable<std::string>
57 {
58 public:
ErasedLayerNamesObservable(Graph & subject)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 
68