F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
RedBlackTreeSet.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \file RedBlackTreeSet.hpp
3 // \author bocchino
4 // \brief An array-based set with internal storage
5 // ======================================================================
6 
7 #ifndef Fw_RedBlackTreeSet_HPP
8 #define Fw_RedBlackTreeSet_HPP
9 
11 
12 namespace Fw {
13 
14 template <typename T, FwSizeType C>
15 class RedBlackTreeSet final : public SetBase<T> {
16  // ----------------------------------------------------------------------
17  // Static assertions
18  // ----------------------------------------------------------------------
19 
20  static_assert(C > 0, "capacity must be greater than zero");
21 
22  // ----------------------------------------------------------------------
23  // Friend class for testing
24  // ----------------------------------------------------------------------
25 
26  template <typename TT, FwSizeType CC>
27  friend class RedBlackTreeSetTester;
28 
29  public:
30  // ----------------------------------------------------------------------
31  // Public types
32  // ----------------------------------------------------------------------
33 
36 
39 
41  using Nodes = Node[C];
42 
45 
47  using FreeNodes = Index[C];
48 
49  public:
50  // ----------------------------------------------------------------------
51  // Public constructors and destructors
52  // ----------------------------------------------------------------------
53 
55  RedBlackTreeSet() : SetBase<T>(), m_extSet(m_nodes, m_freeNodes, C) {}
56 
58  RedBlackTreeSet(const RedBlackTreeSet<T, C>& set) : SetBase<T>(), m_extSet(m_nodes, m_freeNodes, C) { *this = set; }
59 
61  ~RedBlackTreeSet() override = default;
62 
63  public:
64  // ----------------------------------------------------------------------
65  // Public member functions
66  // ----------------------------------------------------------------------
67 
70  this->m_extSet.copyDataFrom(set);
71  return *this;
72  }
73 
76  ConstIterator begin() const override { return this->m_extSet.begin(); }
77 
79  void clear() override { this->m_extSet.clear(); }
80 
83  ConstIterator end() const override { return this->m_extSet.end(); }
84 
87  Success find(const T& element
88  ) const override {
89  return this->m_extSet.find(element);
90  }
91 
94  FwSizeType getCapacity() const override { return this->m_extSet.getCapacity(); }
95 
98  FwSizeType getSize() const override { return this->m_extSet.getSize(); }
99 
102  Success insert(const T& element
103  ) override {
104  return this->m_extSet.insert(element);
105  }
106 
109  Success remove(const T& element
110  ) override {
111  return this->m_extSet.remove(element);
112  }
113 
114  private:
115  // ----------------------------------------------------------------------
116  // Private member variables
117  // ----------------------------------------------------------------------
118 
120  Nodes m_nodes = {};
121 
123  FreeNodes m_freeNodes = {};
124 
126  ExternalRedBlackTreeSet<T> m_extSet = {};
127 };
128 
129 } // namespace Fw
130 
131 #endif
friend class RedBlackTreeSetTester
~RedBlackTreeSet() override=default
Destructor.
PlatformSizeType FwSizeType
Index[C] FreeNodes
The type of the free node array.
RedBlackTreeSet< T, C > & operator=(const RedBlackTreeSet< T, C > &set)
operator=
ConstIterator begin() const override
typename RedBlackTreeSetOrMapImpl< T, Nil >::Index Index
The type of a tree node index.
void clear() override
Clear the set.
FwSizeType getSize() const override
FwSizeType getCapacity() const override
Success find(const T &element) const override
RedBlackTreeSet()
Zero-argument constructor.
Success insert(const T &element) override
ConstIterator end() const override
typename RedBlackTreeSetOrMapImpl< T, Nil >::Node Node
The type of a tree node.
Node[C] Nodes
The type of the tree node array.
Success/Failure.
RedBlackTreeSet(const RedBlackTreeSet< T, C > &set)
Copy constructor.