RIC:1060: Change in PTL
[ric-plt/e2.git] / RIC-E2-TERMINATION / mapWrapper.h
1 /*
2  * Copyright 2019 AT&T Intellectual Property
3  * Copyright 2019 Nokia
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * 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, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 /*
19  * This source code is part of the near-RT RIC (RAN Intelligent Controller)
20  * platform project (RICP).
21  */
22
23
24 //
25 // Created by adi ENZEL on 8/28/19.
26 //
27
28 #ifndef E2_MAPWRAPPER_H
29 #define E2_MAPWRAPPER_H
30
31 #include <unordered_map>
32 #include <mutex>
33 #include <shared_mutex>
34 #include <thread>
35 #include <string>
36 #include <iostream>
37
38 class mapWrapper {
39 public:
40     void *find(char *key) {
41         std::shared_lock<std::shared_timed_mutex> read(fence);
42         auto entry = keyMap.find(key);
43         if (entry == keyMap.end()) {
44             return nullptr;
45         }
46         return entry->second;
47     }
48
49     void setkey(char *key, void *val) {
50         std::unique_lock<std::shared_timed_mutex> write(fence);
51         keyMap[key] = val;
52     }
53
54     void *erase(char *key) {
55         std::unique_lock<std::shared_timed_mutex> write(fence);
56         return (void *)keyMap.erase(key);
57     }
58
59     void clear() {
60         std::unique_lock<std::shared_timed_mutex> write(fence);
61         keyMap.clear();
62     }
63
64     void getKeys(std::vector<char *> &v) {
65         std::shared_lock<std::shared_timed_mutex> read(fence);
66         for (auto const &e : keyMap) {
67             v.emplace_back((char *)e.first.c_str());
68         }
69     }
70
71 private:
72     std::unordered_map<std::string, void *> keyMap;
73     std::shared_timed_mutex fence;
74
75 };
76 #endif //E2_MAPWRAPPER_H