]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/cpp/src/arrow/util/concurrent_map.h
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / cpp / src / arrow / util / concurrent_map.h
1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing,
12 // software distributed under the License is distributed on an
13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 // KIND, either express or implied. See the License for the
15 // specific language governing permissions and limitations
16 // under the License.
17
18 #pragma once
19
20 #include <unordered_map>
21 #include <utility>
22
23 #include "arrow/util/mutex.h"
24
25 namespace arrow {
26 namespace util {
27
28 template <typename K, typename V>
29 class ConcurrentMap {
30 public:
31 void Insert(const K& key, const V& value) {
32 auto lock = mutex_.Lock();
33 map_.insert({key, value});
34 }
35
36 template <typename ValueFunc>
37 V GetOrInsert(const K& key, ValueFunc&& compute_value_func) {
38 auto lock = mutex_.Lock();
39 auto it = map_.find(key);
40 if (it == map_.end()) {
41 auto pair = map_.emplace(key, compute_value_func());
42 it = pair.first;
43 }
44 return it->second;
45 }
46
47 void Erase(const K& key) {
48 auto lock = mutex_.Lock();
49 map_.erase(key);
50 }
51
52 void Clear() {
53 auto lock = mutex_.Lock();
54 map_.clear();
55 }
56
57 size_t size() const {
58 auto lock = mutex_.Lock();
59 return map_.size();
60 }
61
62 private:
63 std::unordered_map<K, V> map_;
64 mutable arrow::util::Mutex mutex_;
65 };
66
67 } // namespace util
68 } // namespace arrow