Skip to content

RedBlackTreeSet

RedBlackTreeSet is a final class template defined in Fw/DataStructures. It represents a set based on a red-black tree with internal storage.

1. Template Parameters

RedBlackTreeSet has the following template parameters.

Kind Name Purpose
typename T The type of an element in the set
FwSizeType C The capacity, i.e., the maximum number of elements that the set can store

RedBlackTreeSet statically asserts that C > 0.

2. Base Class

RedBlackTreeSet is publicly derived from SetBase<T>.

3. Public Types

RedBlackTreeSet defines the following public types:

Name Definition
ConstIterator Alias of SetConstIterator<T>
Entry Alias of SetOrMapImplEntry<T, Nil>

The type Nil is defined in this file.

4. Private Member Variables

RedBlackTreeSet has the following private member variables.

Name Type Purpose Default Value
m_extSet ExternalRedBlackTreeSet<T> The external set implementation C++ default initialization
m_entries Entry[C] The array providing the backing memory for m_extSet C++ default initialization

The type Entry is defined in this section.

classDiagram
    RedBlackTreeSet *-- ExternalRedBlackTreeSet

5. Public Constructors and Destructors

5.1. Zero-Argument Constructor

RedBlackTreeSet()

Initialize m_extSet with ExternalRedBlackTreeSet<T>(m_entries, C).

Example:

RedBlackTreeSet<U32, 10> set;

5.2. Copy Constructor

RedBlackTreeSet(const RedBlackTreeSet<T, C>& set)
  1. Initialize m_extSet with ExternalRedBlackTreeSet<T>(m_entries, C).

  2. Set *this = set.

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set s1;
// Insert an item
const U32 element = 42;
const auto status = s1.insert(element);
ASSERT_EQ(status, Success::SUCCESS);
// Call the copy constructor
Set s2;
ASSERT_EQ(s2.getSize(), 1);

5.3. Destructor

~RedBlackTreeSet() override

Defined as = default.

6. Public Member Functions

6.1. operator=

RedBlackTreeSet<T, C>& operator=(const RedBlackTreeSet<T, C>& set)

Return m_extSet.copyDataFrom(set).

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set s1;
// Insert an item
U32 element = 42;
const auto status = s1.insert(element);
ASSERT_EQ(status, Success::SUCCESS);
// Call the default constructor
Set s2;
ASSERT_EQ(s2.getSize(), 0);
// Call the copy assignment operator
s2 = s1;
ASSERT_EQ(s2.getSize(), 1);
status = s2.find(element);
ASSERT_EQ(status, Success::SUCCESS);

6.2. begin

ConstIterator begin() const

Return m_extSet.begin().

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
// Insert an element in the set
const auto status = map.insert(42);
ASSERT_EQ(status, Fw::Success::SUCCESS);
// Get a set const iterator object
auto it = set.begin();
// Use the iterator to access the underlying map const entry
ASSERT_EQ(*it, 42);

6.3. clear

void clear() override

Call m_extSet.clear().

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
const auto status = set.insert(42);
ASSERT_EQ(set.getSize(), 1);
set.clear();
ASSERT_EQ(set.getSize(), 0);

6.4. end

ConstIterator end() const

Return m_extSet.end().

Example:

using Set = RedBlackTreeSet<U32, 10>;
// Call the constructor providing backing storage
Set set;
// Insert an element in the set
auto status = set.insert(42);
ASSERT_EQ(status, Fw::Success::SUCCESS);
// Get a set const iterator object
auto iter = set.begin();
// Check that iter is not at the end
ASSERT_NE(iter, set.end());
// Increment iter
it++;
// Check that iter is at the end
ASSERT_EQ(iter, set.end());

6.5. find

Success find(const K& element, V& value) override

Return m_extSet.find(element).

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
auto status = set.find(42);
ASSERT_EQ(status, Success::FAILURE);
status = set.insert(42);
ASSERT_EQ(status, Success::SUCCESS);
status = set.find(42);
ASSERT_EQ(status, Success::SUCCESS);

6.6. getCapacity

FwSizeType getCapacity() const override

Return m_extSet.getCapacity().

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
ASSERT_EQ(set.getCapacity(), 10);

6.7. getSize

FwSizeType getSize() const override

Return m_extSet.getSize().

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
auto size = set.getSize();
ASSERT_EQ(size, 0);
const auto status = set.insert(42);
ASSERT_EQ(status, Success::SUCCESS);
size = set.getSize();
ASSERT_EQ(size, 1);

6.8. insert

Success insert(const T& element) override

Return m_extSet.insert(element).

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
auto size = set.getSize();
ASSERT_EQ(size, 0);
const auto status = set.insert(42);
ASSERT_EQ(status, Success::SUCCESS);
size = set.getSize();
ASSERT_EQ(size, 1);

6.9. remove

Success remove(const T& element) override

Return m_extSet.remove(element).

Example:

using Set = RedBlackTreeSet<U32, 10>;
Set set;
auto size = set.getSize();
ASSERT_EQ(size, 0);
auto status = set.insert(42);
ASSERT_EQ(status, Success::SUCCESS);
size = set.getSize();
ASSERT_EQ(size, 1);
// Element does not exist
status = set.remove(0);
ASSERT_EQ(status, Success::FAILURE);
ASSERT_EQ(size, 1);
// Element exists
status = set.remove(42);
ASSERT_EQ(status, Success::SUCCESS);
ASSERT_EQ(size, 0);