/** * @brief 线程安全模板类 * @version V 1.0.0 * @author 王益俊 * @date 创建时间: 2018-08-20\n * @note 2018-08-20 创建类。\n * @warning * @bug */ #pragma once #include #include #include template class thread_safe_map { private: std::map __map; mutable boost::mutex the_mutex; public: /** * @brief 重置函数。 * @param [in] const Key &inputKey key\n * @param [in] const T &inputValue value\n * @return 无\n * @note * @warning * @bug */ void insert( const Key &inputKey, const T &inputValue ) { boost::mutex::scoped_lock lock( the_mutex ); __map.insert( std::pair( inputKey, inputValue ) ); } /** * @brief 返回map是否为空函数。 * @param 无\n * @return 是否为空\n * @retval true 为空\n * @retval false 不为空\n * @note * @warning * @bug */ bool empty() const { boost::mutex::scoped_lock lock( the_mutex ); return __map.empty(); } /** * @brief 用某个key获取值的函数。 * @param [in] const Key &inputKey 指定的key\n * @param [out] T &outputValue 获得的值\n * @return 是否获取成功\n * @retval true 成功\n * @retval false 失败\n * @note * @warning * @bug */ bool get( const Key &inputKey, T &outputValue ) { boost::mutex::scoped_lock lock( the_mutex ); typename std::map::iterator it; it = __map.find( inputKey ); if ( __map.end() == it ) { return false; } outputValue = it->second; return true; } /** * @brief 用查找某个key是否存在的函数。 * @param [in] const Key &inputKey 指定的key\n * @return 是否存在\n * @retval true 存在\n * @retval false 不存在\n * @note * @warning * @bug */ bool seek( const Key &inputKey ) { boost::mutex::scoped_lock lock( the_mutex ); typename std::map::iterator it; it = __map.find( inputKey ); if ( __map.end() == it ) { return false; } return true; } /** * @brief 更新某个key对应值的函数。 * @param [in] const Key &inputKey 指定的key\n * @param [out] T &outputValue 获得的值\n * @return 是否获取成功\n * @retval true 成功\n * @retval false 失败\n * @note * @warning * @bug */ bool update( const Key &inputKey, const T &inputValue ) { boost::mutex::scoped_lock lock( the_mutex ); typename std::map::iterator it; it = __map.find( inputKey ); if ( __map.end() == it ) { return false; } it->second = inputValue; return true; } /** * @brief 根据某个key删除值的函数。 * @param [in] const Key &inputKey 指定的key\n * @return 无\n * @note * @warning * @bug */ void erase( const Key &inputKey ) { boost::mutex::scoped_lock lock( the_mutex ); __map.erase( inputKey ); } /** * @brief 获得大小的函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ size_t size() const { boost::mutex::scoped_lock lock( the_mutex ); return __map.size(); } /** * @brief 清除map的函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void clear() { boost::mutex::scoped_lock lock( the_mutex ); __map.clear(); } /** * @brief 拷贝map的函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void copy( std::map& dest_map ) { boost::mutex::scoped_lock lock( the_mutex ); dest_map = __map; } };