mirror of
				https://github.com/coop-deluxe/sm64coopdx.git
				synced 2025-10-30 08:01:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <map>
 | 
						|
 | 
						|
typedef std::map<int64_t, void*> Map;
 | 
						|
 | 
						|
struct MapIter {
 | 
						|
    Map* map;
 | 
						|
    Map::iterator itr;
 | 
						|
};
 | 
						|
 | 
						|
extern "C" {
 | 
						|
 | 
						|
void* hmap_create() {
 | 
						|
    return reinterpret_cast<void*> (new Map());
 | 
						|
}
 | 
						|
 | 
						|
void* hmap_get(void* map, int64_t k) {
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    Map::iterator pos = m->find(k);
 | 
						|
    if (pos == m->end()) {
 | 
						|
        return NULL;
 | 
						|
    } else {
 | 
						|
        return pos->second;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
void hmap_put(void* map, int64_t k, void* v) {
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    if (m->count(k) > 0) {
 | 
						|
        m->erase(k);
 | 
						|
    }
 | 
						|
    m->insert(std::pair<int64_t, void*>(k, v));
 | 
						|
}
 | 
						|
 | 
						|
void hmap_del(void* map, int64_t k) {
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    m->erase(k);
 | 
						|
}
 | 
						|
 | 
						|
void hmap_clear(void* map) {
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    m->clear();
 | 
						|
}
 | 
						|
 | 
						|
size_t hmap_len(void* map) {
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    return m->size();
 | 
						|
}
 | 
						|
 | 
						|
void* hmap_iter(void* map) {
 | 
						|
    auto iter = new MapIter();
 | 
						|
    Map* m = reinterpret_cast<Map*> (map);
 | 
						|
    iter->map = m;
 | 
						|
    return reinterpret_cast<void*> (iter);
 | 
						|
}
 | 
						|
 | 
						|
void* hmap_begin(void* iter) {
 | 
						|
    MapIter* i = reinterpret_cast<MapIter*> (iter);
 | 
						|
    i->itr = i->map->begin();
 | 
						|
    if (i->itr == i->map->end()) {
 | 
						|
        return NULL;
 | 
						|
    }
 | 
						|
    return i->itr->second;
 | 
						|
}
 | 
						|
 | 
						|
void* hmap_next(void* iter) {
 | 
						|
    MapIter* i = reinterpret_cast<MapIter*> (iter);
 | 
						|
    i->itr++;
 | 
						|
    if (i->itr == i->map->end()) {
 | 
						|
        return NULL;
 | 
						|
    }
 | 
						|
    return i->itr->second;
 | 
						|
}
 | 
						|
 | 
						|
} // extern "C"
 |