#include #include #include typedef std::map Map; struct MapIter { Map* map; Map::iterator itr; }; extern "C" { void* hmap_create() { return reinterpret_cast (new Map()); } void* hmap_get(void* map, int64_t k) { Map* m = reinterpret_cast (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); if (m->count(k) > 0) { m->erase(k); } m->insert(std::pair(k, v)); } void hmap_del(void* map, int64_t k) { Map* m = reinterpret_cast (map); m->erase(k); } void hmap_clear(void* map) { Map* m = reinterpret_cast (map); m->clear(); } size_t hmap_len(void* map) { Map* m = reinterpret_cast (map); return m->size(); } void* hmap_iter(void* map) { auto iter = new MapIter(); Map* m = reinterpret_cast (map); iter->map = m; return reinterpret_cast (iter); } void* hmap_begin(void* iter) { MapIter* i = reinterpret_cast (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 (iter); i->itr++; if (i->itr == i->map->end()) { return NULL; } return i->itr->second; } } // extern "C"