24 #ifndef _CORE_UTILS_RWLOCK_MAP_H_
25 #define _CORE_UTILS_RWLOCK_MAP_H_
27 #include <core/threading/read_write_lock.h>
28 #include <core/utils/refptr.h>
34 template <
typename KeyType,
typename ValueType,
typename LessKey = std::less<KeyType>>
35 class RWLockMap :
public std::map<KeyType, ValueType, LessKey>
39 RWLockMap(
const RWLockMap<KeyType, ValueType, LessKey> &lm);
66 template <
typename KeyType,
typename ValueType,
typename LessKey>
74 template <
typename KeyType,
typename ValueType,
typename LessKey>
76 : std::map<KeyType, ValueType, LessKey>::map(lm), rwlock_(new
ReadWriteLock())
81 template <
typename KeyType,
typename ValueType,
typename LessKey>
87 template <
typename KeyType,
typename ValueType,
typename LessKey>
91 rwlock_->lock_for_read();
95 template <
typename KeyType,
typename ValueType,
typename LessKey>
99 rwlock_->lock_for_write();
105 template <
typename KeyType,
typename ValueType,
typename LessKey>
109 return rwlock_->try_lock_for_read();
115 template <
typename KeyType,
typename ValueType,
typename LessKey>
119 return rwlock_->try_lock_for_write();
123 template <
typename KeyType,
typename ValueType,
typename LessKey>
127 return rwlock_->unlock();
134 template <
typename KeyType,
typename ValueType,
typename LessKey>
138 rwlock_->lock_for_write();
139 std::map<KeyType, ValueType, LessKey>::erase(key);
147 template <
typename KeyType,
typename ValueType,
typename LessKey>