aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/containers
diff options
context:
space:
mode:
authormax42 <max42@yandex-team.com>2023-06-30 11:13:34 +0300
committermax42 <max42@yandex-team.com>2023-06-30 11:13:34 +0300
commit3e1899838408bbad47622007aa382bc8a2b01f87 (patch)
tree0f21c1e6add187ddb6c3ccc048a7d640ce03fb87 /library/cpp/containers
parent5463eb3f5e72a86f858a3d27c886470a724ede34 (diff)
downloadydb-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.h128
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);
- }
-};