Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Set_Array.h
Go to the documentation of this file.
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#ifndef _Stroika_Foundation_Containers_Concrete_Set_Array_h_
5#define _Stroika_Foundation_Containers_Concrete_Set_Array_h_
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
10#include "Stroika/Foundation/Containers/Set.h"
11
12/**
13 * \file
14 *
15 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
16 *
17 */
18
20
21 /**
22 * \brief Set_Array<T> is an Array-based concrete implementation of the Set<T> container pattern.
23 *
24 * \note Runtime performance/complexity:
25 * Set_stdset<T> is a compact representation, but ONLY reasonable for very small sets. Performance is O(N) as set grows.
26 *
27 * o Additions and Removals are generally O(N)
28 *
29 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
30 */
31 template <typename T>
32 class Set_Array : public Private::ArrayBasedContainer<Set_Array<T>, Set<T>, true> {
33 private:
35
36 public:
37 using ElementEqualityComparerType = typename inherited::ElementEqualityComparerType;
38 using value_type = typename inherited::value_type;
39
40 public:
41 /**
42 * \see docs on Set<> constructor
43 */
44 Set_Array ();
45 template <IEqualsComparer<T> EQUALS_COMPARER>
46 explicit Set_Array (EQUALS_COMPARER&& equalsComparer);
47 Set_Array (Set_Array&&) noexcept = default;
48 Set_Array (const Set_Array&) noexcept = default;
49 Set_Array (const initializer_list<value_type>& src);
50 template <IEqualsComparer<T> EQUALS_COMPARER>
51 Set_Array (EQUALS_COMPARER&& equalsComparer, const initializer_list<value_type>& src);
52 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
53 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, Set_Array<T>>)
54 explicit Set_Array (ITERABLE_OF_ADDABLE&& src)
55#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
56 : Set_Array{}
57 {
58 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
59 AssertRepValidType_ ();
60 }
61#endif
62 ;
63 template <IEqualsComparer<T> EQUALS_COMPARER, IIterableOfTo<T> ITERABLE_OF_ADDABLE>
64 Set_Array (EQUALS_COMPARER&& equalsComparer, ITERABLE_OF_ADDABLE&& src);
65 template <IInputIterator<T> ITERATOR_OF_ADDABLE>
66 Set_Array (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
67 template <IEqualsComparer<T> EQUALS_COMPARER, IInputIterator<T> ITERATOR_OF_ADDABLE>
68 Set_Array (EQUALS_COMPARER&& equalsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
69
70 public:
71 /**
72 */
73 nonvirtual Set_Array& operator= (Set_Array&&) noexcept = default;
74 nonvirtual Set_Array& operator= (const Set_Array&) = default;
75
76 private:
78 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<T>) EQUALS_COMPARER>
79 class Rep_;
80
81 private:
82 nonvirtual void AssertRepValidType_ () const;
83 };
84
85}
86
87/*
88 ********************************************************************************
89 ******************************* Implementation Details *************************
90 ********************************************************************************
91 */
92
93#include "Set_Array.inl"
94
95#endif /*_Stroika_Foundation_Containers_Concrete_Set_Array_h_ */
Set_Array<T> is an Array-based concrete implementation of the Set<T> container pattern.
Definition Set_Array.h:32
ArrayBasedContainer is a Stroika implementation detail, but its public methods are fair game and full...
impl detail for array based container support (see ArrayBasedContainer docs on bool USING_IREP)
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
Definition Set.h:105
typename inherited::value_type value_type
Definition Set.h:122
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eEquals, function< bool(T, T)> > ElementEqualityComparerType
Definition Set.h:137
nonvirtual void AddAll(ITERATOR_OF_ADDABLE &&start, ITERATOR_OF_ADDABLE2 &&end)
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.