nx_metadata_sdk  1.0
Metadata SDK
list.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <vector>
6 
7 #include <nx/kit/debug.h>
8 
9 #include <nx/sdk/ptr.h>
10 #include <nx/sdk/i_list.h>
11 #include <nx/sdk/helpers/ref_countable.h>
12 
13 namespace nx::sdk {
14 
15 template<typename IItem>
16 class List: public RefCountable<IList<IItem>>
17 {
18 public:
19  virtual int count() const override
20  {
21  return (int) m_items.size();
22  }
23 
24  void addItem(IItem* item)
25  {
26  if (!NX_KIT_ASSERT(item))
27  return;
28 
29  m_items.push_back(nx::sdk::shareToPtr(item));
30  }
31 
32  void clear()
33  {
34  m_items.clear();
35  }
36 
37 protected:
38  virtual IItem* getAt(int index) const override
39  {
40  if (!NX_KIT_ASSERT(index >= 0 && index < (int) m_items.size()))
41  return nullptr;
42 
43  if (!NX_KIT_ASSERT(m_items[index]))
44  return nullptr;
45 
46  return nx::sdk::shareToPtr(m_items[index]).releasePtr();
47  }
48 
49 private:
50  std::vector<nx::sdk::Ptr<IItem>> m_items;
51 };
52 
53 } // namespace nx::sdk
#define NX_KIT_ASSERT(...)
Definition: debug.h:128
virtual IItem * getAt(int index) const override
Definition: list.h:38
Definition: device_agent.h:13
Definition: list.h:16
Definition: ref_countable.h:83