Fixed put and remove for bimaps
parent
a1a4cfb88f
commit
8536dbd0b3
|
@ -168,12 +168,14 @@ class LockFreeIntBiMap<V: Any> : MutableMap<Int, V>, Cloneable, Serializable {
|
|||
override fun put(key: Int, value: V): V? {
|
||||
val prevForwardValue = forwardHashMap.put(key, value)
|
||||
if (prevForwardValue != null) {
|
||||
reverseHashMap.remove(prevForwardValue, defaultReturnValue)
|
||||
reverseHashMap.remove(prevForwardValue)
|
||||
}
|
||||
|
||||
val prevReverseValue = reverseHashMap[value, defaultReturnValue]!!
|
||||
val prevReverseValue = reverseHashMap[value, defaultReturnValue]
|
||||
reverseHashMap.put(value, key)
|
||||
if (prevReverseValue != defaultReturnValue) {
|
||||
// WHOOPS!
|
||||
|
||||
// put the old value back
|
||||
if (prevForwardValue != null) {
|
||||
forwardHashMap.put(key, prevForwardValue)
|
||||
|
@ -181,6 +183,7 @@ class LockFreeIntBiMap<V: Any> : MutableMap<Int, V>, Cloneable, Serializable {
|
|||
else {
|
||||
forwardHashMap.remove(key)
|
||||
}
|
||||
|
||||
reverseHashMap.put(value, prevReverseValue)
|
||||
|
||||
throw StateException("Value already exists. Keys and values must both be unique!")
|
||||
|
@ -277,7 +280,7 @@ class LockFreeIntBiMap<V: Any> : MutableMap<Int, V>, Cloneable, Serializable {
|
|||
override fun remove(key: Int): V? {
|
||||
val value = forwardHashMap.remove(key)
|
||||
if (value != null) {
|
||||
reverseHashMap.remove(value, defaultReturnValue)
|
||||
reverseHashMap.remove(value)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
|
|
@ -165,23 +165,25 @@ class LockFreeObjectIntBiMap<K: Any> : MutableMap<K, Int>, Cloneable, Serializab
|
|||
* unmodified in this event. To avoid this exception, call [.putForce] putForce(K, V) instead.
|
||||
*/
|
||||
@Synchronized
|
||||
@Throws(IllegalArgumentException::class)
|
||||
override fun put(key: K, value: Int): Int {
|
||||
val prevForwardValue = forwardHashMap[key, defaultReturnValue]!!
|
||||
forwardHashMap.put(key, value)
|
||||
if (prevForwardValue != defaultReturnValue) {
|
||||
@Throws(StateException::class)
|
||||
override fun put(key: K, value: Int): Int? {
|
||||
val prevForwardValue = forwardHashMap.put(key, value)
|
||||
if (prevForwardValue != null) {
|
||||
reverseHashMap.remove(prevForwardValue)
|
||||
}
|
||||
|
||||
val prevReverseValue = reverseHashMap.put(value, key)
|
||||
if (prevReverseValue != null) {
|
||||
// WHOOPS!!
|
||||
|
||||
// put the old value back
|
||||
if (prevForwardValue != defaultReturnValue) {
|
||||
if (prevForwardValue != null) {
|
||||
forwardHashMap.put(key, prevForwardValue)
|
||||
}
|
||||
else {
|
||||
forwardHashMap.remove(key, defaultReturnValue)
|
||||
forwardHashMap.remove(key)
|
||||
}
|
||||
|
||||
reverseHashMap.put(value, prevReverseValue)
|
||||
|
||||
throw StateException("Value already exists. Keys and values must both be unique!")
|
||||
|
|
Loading…
Reference in New Issue