diff options
Diffstat (limited to 'src/Map.cc')
-rw-r--r-- | src/Map.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/Map.cc b/src/Map.cc new file mode 100644 index 0000000..c4d6070 --- /dev/null +++ b/src/Map.cc @@ -0,0 +1,49 @@ +#include <map> +#include <string> + +#include "httpd_Map.h" + +typedef std::map<std::string,void *> iMap; + +extern "C" { + +uMap Httpd_MapCreate(void) +{ + return new iMap; +} + +void * Httpd_MapData(uMap map, size_t keylen, const char * key) +{ + iMap& imap(*static_cast<iMap*>(map)); + const std::string ikey(key, keylen); + iMap::iterator it(imap.find(ikey)); + + if(it != imap.end()) + return it->second; + else + return NULL; +} + +int Httpd_MapStore(uMap map, size_t keylen, const char * key, void * data) +{ + iMap& imap(*static_cast<iMap*>(map)); + const std::string ikey(key, keylen); + iMap::iterator it(imap.find(ikey)); + + if(it != imap.end()) + it->second = data; + else + imap[ikey] = data; + + return 0; +} + +void Httpd_MapDestroy(uMap map, void (*destroy)(void *)) +{ + iMap& imap(*static_cast<iMap*>(map)); + for(iMap::iterator it = imap.begin() ; it != imap.end() ; ++it) + destroy(it->second); + delete &imap; +} + +} |