Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
MultiSet_LinkedList.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_LinkedList_h_
5#define _Stroika_Foundation_Containers_Concrete_MultiSet_LinkedList_h_ 1
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
10
11/**
12 * \file
13 *
14 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
15 *
16 */
17
19
20 /**
21 * \note Runtime performance/complexity:
22 * o size () is O(N), but empty () is constant
23 *
24 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
25 */
26 template <typename T, typename TRAITS = DefaultTraits::MultiSet<T>>
27 class MultiSet_LinkedList : public MultiSet<T, TRAITS> {
28 private:
30
31 public:
32 using CounterType = typename inherited::CounterType;
33 using ElementEqualityComparerType = typename inherited::ElementEqualityComparerType;
34 using value_type = typename inherited::value_type;
35
36 public:
37 /**
38 * \see docs on MultiSet<> constructor
39 */
41 template <IEqualsComparer<T> EQUALS_COMPARER>
42 explicit MultiSet_LinkedList (EQUALS_COMPARER&& equalsComparer);
43 MultiSet_LinkedList (MultiSet_LinkedList&&) noexcept = default;
44 MultiSet_LinkedList (const MultiSet_LinkedList&) noexcept = default;
45 MultiSet_LinkedList (const initializer_list<T>& src);
46 template <IEqualsComparer<T> EQUALS_COMPARER>
47 MultiSet_LinkedList (EQUALS_COMPARER&& equalsComparer, const initializer_list<T>& src);
48 MultiSet_LinkedList (const initializer_list<value_type>& src);
49 template <IEqualsComparer<T> EQUALS_COMPARER>
50 MultiSet_LinkedList (EQUALS_COMPARER&& equalsComparer, const initializer_list<value_type>& src);
51 template <IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
52 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, MultiSet_LinkedList<T, TRAITS>>)
53 explicit MultiSet_LinkedList (ITERABLE_OF_ADDABLE&& src)
54#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
56 {
57 AddAll (forward<ITERABLE_OF_ADDABLE> (src));
58 AssertRepValidType_ ();
59 }
60#endif
61 ;
62 template <IEqualsComparer<T> EQUALS_COMPARER, IIterableOfTo<typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
63 MultiSet_LinkedList (EQUALS_COMPARER&& equalsComparer, ITERABLE_OF_ADDABLE&& src);
64 template <IInputIterator<typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
65 MultiSet_LinkedList (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
66 template <IEqualsComparer<T> EQUALS_COMPARER, IInputIterator<typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
67 MultiSet_LinkedList (EQUALS_COMPARER&& equalsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
68
69 public:
70 nonvirtual MultiSet_LinkedList& operator= (MultiSet_LinkedList&&) noexcept = default;
71 nonvirtual MultiSet_LinkedList& operator= (const MultiSet_LinkedList&) = default;
72
73 private:
74 using IImplRepBase_ = typename MultiSet<T, TRAITS>::_IRep;
75 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<T>) EQUALS_COMPARER>
76 class Rep_;
77
78 private:
79 nonvirtual void AssertRepValidType_ () const;
80 };
81
82}
83
84#include "MultiSet_LinkedList.inl"
85
86#endif /*_Stroika_Foundation_Containers_Concrete_MultiSet_LinkedList_h_ */
nonvirtual void AddAll(ITERATOR_OF_ADDABLE &&start, ITERATOR_OF_ADDABLE2 &&end)
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eEquals, function< bool(ArgByValueType< T >, ArgByValueType< T >)> > ElementEqualityComparerType
Definition MultiSet.h:161
typename inherited::value_type value_type
Definition MultiSet.h:149
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.