| 217 | |
| 218 | template <typename K, typename V> |
| 219 | void Map<K, V>::uncheckedAdd(K key, V value, bool replace) { |
| 220 | INIT_HASH_LOOP(key); |
| 221 | Int freepos = -1; |
| 222 | while (_state[pos] != SLOT_EMPTY) { |
| 223 | if (_state[pos] == occ && _cmp(_keys[pos], key) == 0) { |
| 224 | if (replace) { |
| 225 | _keys[pos] = key; |
| 226 | _values[pos] = value; |
| 227 | } |
| 228 | return; |
| 229 | } |
| 230 | if (_state[pos] == SLOT_DELETED && freepos < 0) |
| 231 | freepos = pos; |
| 232 | pos = next(pos, hash) & mask; |
| 233 | } |
| 234 | if (freepos >= 0) { |
| 235 | _deleted--; |
| 236 | pos = freepos; |
| 237 | } |
| 238 | _keys[pos] = key; |
| 239 | _values[pos] = value; |
| 240 | _state[pos] = occ; |
| 241 | _count++; |
| 242 | } |
| 243 | |
| 244 | template <typename K, typename V> |
| 245 | Map<K, V> *Map<K, V>::add(K key, V value, bool replace) { |