]>
git.proxmox.com Git - ceph.git/blob - 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
9 // http://www.apache.org/licenses/LICENSE-2.0
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
20 #include <unordered_map>
23 #include "arrow/util/mutex.h"
28 template <typename K
, typename V
>
31 void Insert(const K
& key
, const V
& value
) {
32 auto lock
= mutex_
.Lock();
33 map_
.insert({key
, value
});
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());
47 void Erase(const K
& key
) {
48 auto lock
= mutex_
.Lock();
53 auto lock
= mutex_
.Lock();
58 auto lock
= mutex_
.Lock();
63 std::unordered_map
<K
, V
> map_
;
64 mutable arrow::util::Mutex mutex_
;