diff options
author | max42 <max42@yandex-team.com> | 2023-06-30 11:13:34 +0300 |
---|---|---|
committer | max42 <max42@yandex-team.com> | 2023-06-30 11:13:34 +0300 |
commit | 3e1899838408bbad47622007aa382bc8a2b01f87 (patch) | |
tree | 0f21c1e6add187ddb6c3ccc048a7d640ce03fb87 /library/cpp/containers | |
parent | 5463eb3f5e72a86f858a3d27c886470a724ede34 (diff) | |
download | ydb-3e1899838408bbad47622007aa382bc8a2b01f87.tar.gz |
Revert "YT-19324: move YT provider to ydb/library/yql"
This reverts commit ca272f12fdd0e8d5c3e957fc87939148f1caaf72, reversing
changes made to 49f8acfc8b0b5c0071b804423bcf53fda26c7c12.
Diffstat (limited to 'library/cpp/containers')
-rw-r--r-- | library/cpp/containers/concurrent_hash/concurrent_hash.h | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/library/cpp/containers/concurrent_hash/concurrent_hash.h b/library/cpp/containers/concurrent_hash/concurrent_hash.h deleted file mode 100644 index f15a1c3d6ec..00000000000 --- a/library/cpp/containers/concurrent_hash/concurrent_hash.h +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - -#include <util/generic/hash.h> -#include <util/system/spinlock.h> - -#include <array> - -template <typename K, typename V, size_t BucketCount = 64, typename L = TAdaptiveLock> -class TConcurrentHashMap { -public: - using TActualMap = THashMap<K, V>; - using TLock = L; - - struct TBucket { - friend class TConcurrentHashMap; - - private: - TActualMap Map; - mutable TLock Mutex; - - public: - TLock& GetMutex() const { - return Mutex; - } - - TActualMap& GetMap() { - return Map; - } - const TActualMap& GetMap() const { - return Map; - } - - const V& GetUnsafe(const K& key) const { - typename TActualMap::const_iterator it = Map.find(key); - Y_VERIFY(it != Map.end(), "not found by key"); - return it->second; - } - - V& GetUnsafe(const K& key) { - typename TActualMap::iterator it = Map.find(key); - Y_VERIFY(it != Map.end(), "not found by key"); - return it->second; - } - - V RemoveUnsafe(const K& key) { - typename TActualMap::iterator it = Map.find(key); - Y_VERIFY(it != Map.end(), "removing non-existent key"); - V r = std::move(it->second); - Map.erase(it); - return r; - } - - bool HasUnsafe(const K& key) const { - typename TActualMap::const_iterator it = Map.find(key); - return (it != Map.end()); - } - }; - - std::array<TBucket, BucketCount> Buckets; - -public: - TBucket& GetBucketForKey(const K& key) { - return Buckets[THash<K>()(key) % BucketCount]; - } - - const TBucket& GetBucketForKey(const K& key) const { - return Buckets[THash<K>()(key) % BucketCount]; - } - - void Insert(const K& key, const V& value) { - TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - bucket.Map[key] = value; - } - - void InsertUnique(const K& key, const V& value) { - TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - if (!bucket.Map.insert(std::make_pair(key, value)).second) { - Y_FAIL("non-unique key"); - } - } - - V& InsertIfAbsent(const K& key, const V& value) { - TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - return bucket.Map.insert(std::make_pair(key, value)).first->second; - } - - template <typename Callable> - V& InsertIfAbsentWithInit(const K& key, Callable initFunc) { - TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - if (bucket.HasUnsafe(key)) { - return bucket.GetUnsafe(key); - } - - return bucket.Map.insert(std::make_pair(key, initFunc())).first->second; - } - - V Get(const K& key) const { - const TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - return bucket.GetUnsafe(key); - } - - bool Get(const K& key, V& result) const { - const TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - if (bucket.HasUnsafe(key)) { - result = bucket.GetUnsafe(key); - return true; - } - return false; - } - - V Remove(const K& key) { - TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - return bucket.RemoveUnsafe(key); - } - - bool Has(const K& key) const { - const TBucket& bucket = GetBucketForKey(key); - TGuard<TLock> guard(bucket.Mutex); - return bucket.HasUnsafe(key); - } -}; |