1d6b92ffaSHans Petter Selasky /*
2d6b92ffaSHans Petter Selasky * Copyright (c) 2017 Mellanox Technologies LTD. All rights reserved.
3d6b92ffaSHans Petter Selasky *
4d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two
5d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU
6d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file
7d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the
8d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below:
9d6b92ffaSHans Petter Selasky *
10d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or
11d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following
12d6b92ffaSHans Petter Selasky * conditions are met:
13d6b92ffaSHans Petter Selasky *
14d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above
15d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
16d6b92ffaSHans Petter Selasky * disclaimer.
17d6b92ffaSHans Petter Selasky *
18d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above
19d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
20d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials
21d6b92ffaSHans Petter Selasky * provided with the distribution.
22d6b92ffaSHans Petter Selasky *
23d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30d6b92ffaSHans Petter Selasky * SOFTWARE.
31d6b92ffaSHans Petter Selasky *
32d6b92ffaSHans Petter Selasky */
33d6b92ffaSHans Petter Selasky
34*656371d7SHans Petter Selasky #if __cplusplus >= 201103L
35d6b92ffaSHans Petter Selasky #include <unordered_map>
36*656371d7SHans Petter Selasky #define UM_NAMESPACE std
370b12d33cSHans Petter Selasky #else
380b12d33cSHans Petter Selasky #include <tr1/unordered_map>
39*656371d7SHans Petter Selasky #define UM_NAMESPACE std::tr1
400b12d33cSHans Petter Selasky #endif
41d6b92ffaSHans Petter Selasky
42d6b92ffaSHans Petter Selasky class HashTable {
43d6b92ffaSHans Petter Selasky public:
44*656371d7SHans Petter Selasky UM_NAMESPACE::unordered_map<void *, void *> map;
HashTable()45d6b92ffaSHans Petter Selasky HashTable() { };
~HashTable()46d6b92ffaSHans Petter Selasky ~HashTable() { };
47d6b92ffaSHans Petter Selasky };
48d6b92ffaSHans Petter Selasky
49d6b92ffaSHans Petter Selasky extern "C" {
50d6b92ffaSHans Petter Selasky
51d6b92ffaSHans Petter Selasky #if HAVE_CONFIG_H
52d6b92ffaSHans Petter Selasky #include <config.h>
53d6b92ffaSHans Petter Selasky #endif
54d6b92ffaSHans Petter Selasky
55d6b92ffaSHans Petter Selasky #include "internal.h"
56d6b92ffaSHans Petter Selasky
57d6b92ffaSHans Petter Selasky GHashTable *
GHashTableNew(void)58d6b92ffaSHans Petter Selasky GHashTableNew(void)
59d6b92ffaSHans Petter Selasky {
60d6b92ffaSHans Petter Selasky return ((GHashTable *)(new HashTable()));
61d6b92ffaSHans Petter Selasky }
62d6b92ffaSHans Petter Selasky
63d6b92ffaSHans Petter Selasky void
GHashTableDestroy(GHashTable * ght)64d6b92ffaSHans Petter Selasky GHashTableDestroy(GHashTable *ght)
65d6b92ffaSHans Petter Selasky {
66d6b92ffaSHans Petter Selasky delete (HashTable *)ght;
67d6b92ffaSHans Petter Selasky }
68d6b92ffaSHans Petter Selasky
69d6b92ffaSHans Petter Selasky void
GHashTableInsert(GHashTable * ght,void * key,void * value)70d6b92ffaSHans Petter Selasky GHashTableInsert(GHashTable *ght, void *key, void *value)
71d6b92ffaSHans Petter Selasky {
72d6b92ffaSHans Petter Selasky HashTable *ht = (HashTable *)ght;
73d6b92ffaSHans Petter Selasky ht->map[key] = value;
74d6b92ffaSHans Petter Selasky }
75d6b92ffaSHans Petter Selasky
76d6b92ffaSHans Petter Selasky void *
GHashTableLookup(GHashTable * ght,void * key)77d6b92ffaSHans Petter Selasky GHashTableLookup(GHashTable *ght, void *key)
78d6b92ffaSHans Petter Selasky {
79d6b92ffaSHans Petter Selasky HashTable *ht = (HashTable *)ght;
80d6b92ffaSHans Petter Selasky
81d6b92ffaSHans Petter Selasky if (ht->map.find(key) == ht->map.end())
82d6b92ffaSHans Petter Selasky return (NULL);
83d6b92ffaSHans Petter Selasky return (ht->map[key]);
84d6b92ffaSHans Petter Selasky }
85d6b92ffaSHans Petter Selasky
86d6b92ffaSHans Petter Selasky }
87