* Copyright (c) 2025 HiSilicon Technologies Co., Ltd. All rights reserved.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#include <cstdint>
#include <cstdlib>
#include <unordered_map>
#include "ummu_utils.h"
using namespace std;
void *create_map(void)
{
unordered_map<uint32_t, void *> *map = new unordered_map<uint32_t, void *>();
return static_cast<void *>(map);
}
int hashmap_insert(void *map, uint32_t key, void *value)
{
unordered_map<uint32_t, void *> *map_ptr = static_cast<unordered_map<uint32_t, void *> *>(map);
auto result = map_ptr->find(key);
if (result == map_ptr->end()) {
map_ptr->emplace(key, value);
return 0;
} else {
return -1;
}
}
void *hashmap_get(void *map, uint32_t key)
{
void *value = nullptr;
unordered_map<uint32_t, void *> *map_ptr = static_cast<unordered_map<uint32_t, void *> *>(map);
auto result = map_ptr->find(key);
if (result != map_ptr->end()) {
value = result->second;
}
return value;
}
size_t hashmap_del(void *map, uint32_t key)
{
unordered_map<uint32_t, void *> *map_ptr = static_cast<unordered_map<uint32_t, void *> *>(map);
return map_ptr->erase(key);
}
void hashmap_clear(void *map, value_destroy destroyer)
{
unordered_map<uint32_t, void *> *map_ptr = static_cast<unordered_map<uint32_t, void *> *>(map);
for (auto it = map_ptr->begin(); it != map_ptr->end(); it++) {
if (destroyer) {
destroyer(static_cast<void *>(it->second));
} else {
free(it->second);
}
}
map_ptr->clear();
delete map_ptr;
}