/* */ #ifndef _D_HANDLE_REGISTRY_H_ #define _D_HANDLE_REGISTRY_H_ #include "common.h" #include "SharedHandle.h" #include #include namespace aria2 { template class HandleRegistry { typedef std::map > HandleMap; private: HandleMap handleMap; public: void registerHandle(const K& key, const SharedHandle& obj) { unregisterHandle(key); typename HandleMap::value_type p(key, obj); handleMap.insert(p); } void unregisterHandle(const K& key) { handleMap.erase(key); } SharedHandle getHandle(const K& key) { typename HandleMap::const_iterator itr = handleMap.find(key); if(itr == handleMap.end()) { return SharedHandle(); } else { return itr->second; } } std::deque > getAll() { std::deque > l; for(typename HandleMap::const_iterator itr = handleMap.begin(); itr != handleMap.end(); ++itr) { const typename HandleMap::value_type& p = *itr; l.push_back(p.second); } return l; } void clear() { handleMap.clear(); } }; } // namespace aria2 #endif // _D_HANDLE_REGISTRY_H_