Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
MultiSet_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_MultiSet_Array_h_
5#define _Stroika_Foundation_Containers_Concrete_MultiSet_Array_h_ 1
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
11
12/**
13 * \file
14 *
15 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
16 *
17 */
18
20
21 /**
22 *
23 * \note Runtime performance/complexity:
24 *
25 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
26 */
27 template <typename T, typename TRAITS = DefaultTraits::MultiSet<T>>
28 class MultiSet_Array : public Private::ArrayBasedContainer<MultiSet_Array<T, TRAITS>, MultiSet<T, TRAITS>, true> {
29 private:
31
32 public:
33 using CounterType = typename inherited::CounterType;
34 using ElementEqualityComparerType = typename inherited::ElementEqualityComparerType;
35 using value_type = typename inherited::value_type;
36
37 public:
38 /**
39 * \see docs on MultiSet<> constructor
40 */
42 template <IEqualsComparer<T> EQUALS_COMPARER>
43 explicit MultiSet_Array (EQUALS_COMPARER&& equalsComparer);
44 MultiSet_Array (MultiSet_Array&&) noexcept = default;
45 MultiSet_Array (const MultiSet_Array&) noexcept = default;
46 MultiSet_Array (const initializer_list<T>& src);
47 template <IEqualsComparer<T> EQUALS_COMPARER>
48 MultiSet_Array (EQUALS_COMPARER&& equalsComparer, const initializer_list<T>& src);
49 MultiSet_Array (const initializer_list<value_type>& src);
50 template <IEqualsComparer<T> EQUALS_COMPARER>
51 MultiSet_Array (EQUALS_COMPARER&& equalsComparer, const initializer_list<value_type>& src);
52 template <IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
53 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, MultiSet_Array<T, TRAITS>>)
54 explicit MultiSet_Array (ITERABLE_OF_ADDABLE&& src)
55#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
57 {
59 this->reserve (src.size ());
60 }
61 AddAll (forward<ITERABLE_OF_ADDABLE> (src));
62 AssertRepValidType_ ();
63 }
64#endif
65 ;
66 template <IEqualsComparer<T> EQUALS_COMPARER, IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
67 MultiSet_Array (EQUALS_COMPARER&& equalsComparer, ITERABLE_OF_ADDABLE&& src);
68 template <IInputIterator<typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
69 MultiSet_Array (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
70 template <IEqualsComparer<T> EQUALS_COMPARER, IInputIterator<typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
71 MultiSet_Array (EQUALS_COMPARER&& equalsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
72
73 public:
74 /**
75 */
76 nonvirtual MultiSet_Array& operator= (MultiSet_Array&&) noexcept = default;
77 nonvirtual MultiSet_Array& operator= (const MultiSet_Array&) = default;
78
79 private:
81 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<T>) EQUALS_COMPARER>
82 class Rep_;
83
84 private:
85 nonvirtual void AssertRepValidType_ () const;
86
87 private:
88 friend inherited;
89 };
90
91}
92
93/*
94 ********************************************************************************
95 ******************************* Implementation Details *************************
96 ********************************************************************************
97 */
98#include "MultiSet_Array.inl"
99
100#endif /*_Stroika_Foundation_Containers_Concrete_MultiSet_Array_h_*/
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)
Concept checks if the given type T has a const size() method which can be called to return a size_t.
Definition Concepts.h:361