Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Bijection_Factory.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
5
6namespace Stroika::Foundation::Containers::Factory {
7
8 /*
9 ********************************************************************************
10 * Bijection_Factory<DOMAIN_TYPE, RANGE_TYPE, DOMAIN_EQUALS_COMPARER, RANGE_EQUALS_COMPARER> *
11 ********************************************************************************
12 */
13 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
15 : fFactory_{f}
16 {
17 }
18 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
23 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
25 : Bijection_Factory{[] () -> FactoryFunctionType {
26 // @todo add more backends, and pay attention to hints
27 // especially easy to add Bijection_Array, and probably strictly better - since add needs to effectively walk whole list to see if new or update.
28 return [] (DataExchange::ValidationStrategy injectivityCheckPolicy, const DOMAIN_EQUALS_COMPARER& domainEqualsComparer,
29 const RANGE_EQUALS_COMPARER& rangeEqualsComparer) {
30 return Concrete::Bijection_LinkedList<DOMAIN_TYPE, RANGE_TYPE>{injectivityCheckPolicy, domainEqualsComparer, rangeEqualsComparer};
31 };
32 }()}
33 {
34 }
35 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
40 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
42 const DOMAIN_EQUALS_COMPARER& domainEqualsComparer, const RANGE_EQUALS_COMPARER& rangeEqualsComparer) const
43 {
44 return this->operator() (DataExchange::ValidationStrategy::eAssertion, domainEqualsComparer, rangeEqualsComparer);
45 }
46 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
48 DataExchange::ValidationStrategy injectivityCheckPolicy, const DOMAIN_EQUALS_COMPARER& domainEqualsComparer,
49 const RANGE_EQUALS_COMPARER& rangeEqualsComparer) const
50 {
51 return this->fFactory_ (injectivityCheckPolicy, domainEqualsComparer, rangeEqualsComparer);
52 }
53 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
55 {
56 AccessDefault_ () = f.has_value () ? *f : Bijection_Factory{Hints{}};
57 }
58 template <typename DOMAIN_TYPE, typename RANGE_TYPE, IEqualsComparer<DOMAIN_TYPE> DOMAIN_EQUALS_COMPARER, IEqualsComparer<RANGE_TYPE> RANGE_EQUALS_COMPARER>
60 {
61 static Bijection_Factory sDefault_{Hints{}};
62 return sDefault_;
63 }
64
65}
Bijection allows for the bijective (1-1) association of two elements.
Definition Bijection.h:103
Bijection_LinkedList<DOMAIN_TYPE, RANGE_TYPE> is an LinkedList-based concrete implementation of the B...
Singleton factory object - Used to create the default backend implementation of a Bijection<> contain...