Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Bijection_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_Bijection_LinkedList_h_
5#define _Stroika_Foundation_Containers_Concrete_Bijection_LinkedList_h_
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
10
11#include "Stroika/Foundation/Containers/Bijection.h"
12
13/**
14 * \file
15 *
16 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
17 */
18
20
21 /**
22 * \brief Bijection_LinkedList<DOMAIN_TYPE, RANGE_TYPE> is an LinkedList-based concrete implementation of the Bijection<DOMAIN_TYPE, RANGE_TYPE> container pattern.
23 *
24 * \note Runtime performance/complexity:
25 * o size () is O(N), but empty () is constant
26 *
27 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
28 */
29 template <typename DOMAIN_TYPE, typename RANGE_TYPE>
30 class Bijection_LinkedList : public Bijection<DOMAIN_TYPE, RANGE_TYPE> {
31 private:
33
34 public:
35 using DomainEqualsCompareFunctionType = typename inherited::DomainEqualsCompareFunctionType;
36 using RangeEqualsCompareFunctionType = typename inherited::RangeEqualsCompareFunctionType;
37 using value_type = typename inherited::value_type;
38
39 public:
40 /**
41 * \see docs on Bijection constructor
42 */
44 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
45 explicit Bijection_LinkedList (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer);
46 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
47 explicit Bijection_LinkedList (DataExchange::ValidationStrategy injectivityCheckPolicy,
48 DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer);
49 Bijection_LinkedList (Bijection_LinkedList&&) noexcept = default;
50 Bijection_LinkedList (const Bijection_LinkedList&) noexcept = default;
51 Bijection_LinkedList (const initializer_list<value_type>& src);
52 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
53 Bijection_LinkedList (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer,
54 const initializer_list<value_type>& src);
55 template <IIterableOfTo<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
56 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, Bijection_LinkedList<DOMAIN_TYPE, RANGE_TYPE>>)
57 explicit Bijection_LinkedList (ITERABLE_OF_ADDABLE&& src)
58#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
60 {
61 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
62 AssertRepValidType_ ();
63 }
64#endif
65 ;
66 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER, IIterableOfTo<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERABLE_OF_ADDABLE>
67 Bijection_LinkedList (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer, ITERABLE_OF_ADDABLE&& src);
68 template <IInputIterator<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERATOR_OF_ADDABLE>
69 Bijection_LinkedList (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
70 template <IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER, IInputIterator<KeyValuePair<DOMAIN_TYPE, RANGE_TYPE>> ITERATOR_OF_ADDABLE>
71 Bijection_LinkedList (DOMAIN_EQUALS_COMPARER&& domainEqualsComparer, RANGE_EQUALS_COMPARER&& rangeEqualsComparer,
72 ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
73
74 public:
75 nonvirtual Bijection_LinkedList& operator= (Bijection_LinkedList&&) noexcept = default;
76 nonvirtual Bijection_LinkedList& operator= (const Bijection_LinkedList&) = default;
77
78 private:
79 using IImplRepBase_ = typename Bijection<DOMAIN_TYPE, RANGE_TYPE>::_IRep;
80 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<DOMAIN_TYPE>) DOMAIN_EQUALS_COMPARER,
81 qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<RANGE_TYPE>) RANGE_EQUALS_COMPARER>
82 class Rep_;
83
84 private:
85 nonvirtual void AssertRepValidType_ () const;
86 };
87
88}
89
90/*
91 ********************************************************************************
92 ******************************* Implementation Details *************************
93 ********************************************************************************
94 */
95
96#include "Bijection_LinkedList.inl"
97
98#endif /*_Stroika_Foundation_Containers_Concrete_Bijection_LinkedList_h_ */
Implementation detail for Bijection<T> implementors.
Definition Bijection.h:567
Bijection allows for the bijective (1-1) association of two elements.
Definition Bijection.h:103
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eEquals, function< bool(ArgByValueType< DomainType >, ArgByValueType< DomainType >)> > DomainEqualsCompareFunctionType
Definition Bijection.h:138
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eEquals, function< bool(RangeType, RangeType)> > RangeEqualsCompareFunctionType
Definition Bijection.h:147
typename inherited::value_type value_type
Definition Bijection.h:120
nonvirtual void AddAll(const CONTAINER_OF_KEYVALUE &items)
Bijection_LinkedList<DOMAIN_TYPE, RANGE_TYPE> is an LinkedList-based concrete implementation of the B...
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.