Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SkipListSupport.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
6
8
9 /*
10 ********************************************************************************
11 *********** SkipListBasedContainer<THIS_CONTAINER,BASE_CONTAINER> **************
12 ********************************************************************************
13 */
14 template <typename THIS_CONTAINER, typename BASE_CONTAINER, bool USING_IREP>
15 template <typename... ARGS>
16 inline SkipListBasedContainer<THIS_CONTAINER, BASE_CONTAINER, USING_IREP>::SkipListBasedContainer (ARGS... args)
17 : BASE_CONTAINER{forward<ARGS> (args)...}
18 {
19 }
20 template <typename THIS_CONTAINER, typename BASE_CONTAINER, bool USING_IREP>
21 inline void SkipListBasedContainer<THIS_CONTAINER, BASE_CONTAINER, USING_IREP>::ReBalance ()
22 {
23 if constexpr (USING_IREP) {
24 using _SafeReadWriteRepAccessor = typename THIS_CONTAINER::template _SafeReadWriteRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
25 _SafeReadWriteRepAccessor{this}._GetWriteableRep ().ReBalance ();
26 }
27 else {
28 using _SafeReadWriteRepAccessor = typename THIS_CONTAINER::template _SafeReadWriteRepAccessor<typename THIS_CONTAINER::Rep_>;
29 return _SafeReadWriteRepAccessor{this}._GetWriteableRep ().fData_.ReBalance ();
30 }
31 }
32
33 /*
34 ********************************************************************************
35 *** SkipListBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP> ******
36 ********************************************************************************
37 */
38 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
39 template <typename... ARGS>
40 inline SkipListBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::SkipListBasedContainerRepImpl (ARGS... args)
41 : BASE_CONTAINER_REP{forward<ARGS> (args)...}
42 {
43 }
44 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
45 void SkipListBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::ReBalance ()
46 {
47 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_};
48 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_.ReBalance ();
49 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fChangeCounts_.PerformedChange ();
50 }
51
52}