All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
GenericModelRepositoryObserver.h
1 // Copyright Wrld Ltd (2022-2022), All Rights Reserved
2 
3 #pragma once
4 
5 #include <functional>
6 
7 namespace Eegeo
8 {
9  namespace Labels
10  {
11  template <typename TRepository>
12  class GenericModelRepositoryObserver : public TRepository::ObserverType
13  {
14  public:
15  using typename TRepository::ObserverType::ItemType;
16 
17  GenericModelRepositoryObserver(std::function<void(const ItemType&)> onItemAdded, std::function<void(const ItemType&)> onItemRemoved)
18  : m_onItemAdded(std::move(onItemAdded))
19  , m_onItemRemoved(std::move(onItemRemoved))
20  {}
21 
22  virtual ~GenericModelRepositoryObserver() = default;
23 
24  void OnItemAdded(const ItemType& item) override
25  {
26  m_onItemAdded(item);
27  }
28 
29  void OnItemRemoved(const ItemType& item) override
30  {
31  m_onItemRemoved(item);
32  }
33 
34  private:
35  std::function<void(const ItemType&)> m_onItemAdded;
36  std::function<void(const ItemType&)> m_onItemRemoved;
37  };
38  }
39 }