TURF_TRACE_DECLARE(ConcurrentMap_LeapFrog, 17)
-template <typename K, typename V, class KT = DefaultKeyTraits<K>, class VT = DefaultValueTraits<V>>
+template <typename K, typename V, class KT = DefaultKeyTraits<K>, class VT = DefaultValueTraits<V> >
class ConcurrentMap_LeapFrog {
public:
typedef K Key;
turf::Atomic<typename Details::Table*> m_root;
public:
- ConcurrentMap_LeapFrog(ureg capacity) : m_root(Details::Table::create(capacity)) {
+ ConcurrentMap_LeapFrog(ureg capacity = Details::InitialSize) : m_root(Details::Table::create(capacity)) {
}
~ConcurrentMap_LeapFrog() {
Value exchangeValue(Value desired) {
TURF_ASSERT(desired != Value(ValueTraits::NullValue));
+ TURF_ASSERT(desired != Value(ValueTraits::Redirect));
TURF_ASSERT(m_cell); // Cell must have been found or inserted
TURF_TRACE(ConcurrentMap_LeapFrog, 4, "[Mutator::exchangeValue] called", uptr(m_table), uptr(m_value));
for (;;) {
// Lookup without creating a temporary Mutator.
Value get(Key key) {
Hash hash = KeyTraits::hash(key);
- TURF_TRACE(ConcurrentMap_LeapFrog, 15, "[get] called", uptr(hash), 0);
+ TURF_TRACE(ConcurrentMap_LeapFrog, 15, "[get] called", uptr(this), uptr(hash));
for (;;) {
typename Details::Table* table = m_root.load(turf::Consume);
typename Details::Cell* cell = Details::find(hash, table);