Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Adder.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
5
6namespace Stroika::Foundation::Containers::Adapters {
7
8 /*
9 ********************************************************************************
10 ******************************** Adapters::Adder *******************************
11 ********************************************************************************
12 */
13 template <IAddableTo CONTAINER_TYPE>
14 inline void Adder<CONTAINER_TYPE>::Add (CONTAINER_TYPE* container, Common::ArgByValueType<value_type> value)
15 {
16 RequireNotNull (container);
17 using CONTAINER_ELT_TYPE = typename CONTAINER_TYPE::value_type;
18 if constexpr (requires (CONTAINER_TYPE p) { p.push_back (declval<CONTAINER_ELT_TYPE> ()); }) {
19 container->push_back (value);
20 }
21 else if constexpr (requires (CONTAINER_TYPE p) { p.push_front (declval<CONTAINER_ELT_TYPE> ()); }) {
22 container->push_front (value);
23 }
24 else if constexpr (requires (CONTAINER_TYPE p) { p.Add (declval<CONTAINER_ELT_TYPE> ()); }) {
25 container->Add (value);
26 }
27 else if constexpr (requires (CONTAINER_TYPE p) { p.insert (declval<CONTAINER_ELT_TYPE> ()); }) {
28 container->insert (value);
29 }
30 else {
32 }
33 }
34
35}
#define AssertNotImplemented()
Definition Assertions.h:401
#define RequireNotNull(p)
Definition Assertions.h:347