Stroika Library 3.0d18
 
Loading...
Searching...
No Matches
HashTableSupport.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
6
8
9 /*
10 ********************************************************************************
11 *********** HashTableBasedContainer<THIS_CONTAINER,BASE_CONTAINER> *************
12 ********************************************************************************
13 */
14 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
15 inline void HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::ReHash (size_t newBucketCount)
16 {
17 using _SafeReadWriteRepAccessor = typename THIS_CONTAINER::template _SafeReadWriteRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
18 _SafeReadWriteRepAccessor{this}._GetWriteableRep ().ReHash (newBucketCount);
19 }
20 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
21 inline void HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::ReHashIfNeeded ()
22 {
23 using _SafeReadWriteRepAccessor = typename THIS_CONTAINER::template _SafeReadWriteRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
24 _SafeReadWriteRepAccessor{this}._GetWriteableRep ().ReHashIfNeeded ();
25 }
26 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
27 inline size_t HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::bucket_count () const
28 {
29 using _SafeReadRepAccessor = typename THIS_CONTAINER ::template _SafeReadRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
30 return _SafeReadRepAccessor{this}._ConstGetRep ().bucket_count ();
31 }
32 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
33 inline size_t HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::bucket_size (size_t bucketIdx) const
34 {
35 using _SafeReadRepAccessor = typename THIS_CONTAINER::template _SafeReadRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
36 return _SafeReadRepAccessor{this}._ConstGetRep ().bucket_size (bucketIdx);
37 }
38 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
39 inline float HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::load_factor () const
40 {
41 using _SafeReadRepAccessor = typename THIS_CONTAINER::template _SafeReadRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
42 return _SafeReadRepAccessor{this}._ConstGetRep ().load_factor ();
43 }
44 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
45 inline float HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::max_load_factor () const
46 {
47 using _SafeReadRepAccessor = typename THIS_CONTAINER::template _SafeReadRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
48 return _SafeReadRepAccessor{this}._ConstGetRep ().max_load_factor ();
49 }
50 template <typename THIS_CONTAINER, typename BASE_CONTAINER>
51 inline void HashTableBasedContainer<THIS_CONTAINER, BASE_CONTAINER>::max_load_factor (float mlf)
52 {
53 using _SafeReadWriteRepAccessor = typename THIS_CONTAINER::template _SafeReadWriteRepAccessor<typename THIS_CONTAINER::IImplRepBase_>;
54 _SafeReadWriteRepAccessor{this}._GetWriteableRep ().max_load_factor (mlf);
55 }
56
57 /*
58 ********************************************************************************
59 *** HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP> *****
60 ********************************************************************************
61 */
62 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
63 void HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::ReHash (size_t newBucketCount)
64 {
65 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_};
66 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_.ReHash (newBucketCount);
67 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fChangeCounts_.PerformedChange ();
68 }
69 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
70 void HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::ReHashIfNeeded ()
71 {
72 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_};
73 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_.ReHashIfNeeded ();
74 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fChangeCounts_.PerformedChange ();
75 }
76 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
77 size_t HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::bucket_count () const
78 {
79 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_};
80 return Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_.bucket_count ();
81 }
82 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
83 size_t HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::bucket_size (size_t bucketIdx) const
84 {
85 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_};
86 return Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_.bucket_size (bucketIdx);
87 }
88 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
89 float HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::load_factor () const
90 {
91 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_};
92 return Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_.load_factor ();
93 }
94 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
95 float HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::max_load_factor () const
96 {
97 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_};
98 return Debug::UncheckedDynamicCast<const THIS_CONTAINER_REP*> (this)->fData_.max_load_factor ();
99 }
100 template <typename THIS_CONTAINER_REP, typename BASE_CONTAINER_REP>
101 void HashTableBasedContainerRepImpl<THIS_CONTAINER_REP, BASE_CONTAINER_REP>::max_load_factor (float mlf)
102 {
103 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_};
104 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fData_.max_load_factor (mlf);
105 Debug::UncheckedDynamicCast<THIS_CONTAINER_REP*> (this)->fChangeCounts_.PerformedChange ();
106 }
107
108}
shared_lock< const AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...
unique_lock< AssertExternallySynchronizedMutex > WriteContext
Instantiate AssertExternallySynchronizedMutex::WriteContext to designate an area of code where protec...