Skip to content

Commit bd6a864

Browse files
committed
[Capsule] Avoid copyAndSetBitmapIndexedNode on equal references when updating
1 parent f5e7d31 commit bd6a864

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

Sources/Capsule/_BitmapIndexedMapNode.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ final class BitmapIndexedMapNode<Key, Value>: MapNode where Key: Hashable {
185185
let subNode = self.getBitmapIndexedNode(index)
186186

187187
let subNodeNew = subNode.updateOrUpdating(subNodeModifyInPlace, key, value, keyHash, shift + bitPartitionSize, &effect)
188-
guard effect.modified else { return self }
188+
guard effect.modified && subNode !== subNodeNew else { return self }
189189

190190
return copyAndSetBitmapIndexedNode(isStorageKnownUniquelyReferenced, bitpos, subNodeNew)
191191
}
@@ -199,7 +199,7 @@ final class BitmapIndexedMapNode<Key, Value>: MapNode where Key: Hashable {
199199

200200
if keyHash == collisionHash {
201201
let subNodeNew = subNode.updateOrUpdating(subNodeModifyInPlace, key, value, keyHash, shift + bitPartitionSize, &effect)
202-
guard effect.modified else { return self }
202+
guard effect.modified && subNode !== subNodeNew else { return self }
203203

204204
return copyAndSetHashCollisionNode(isStorageKnownUniquelyReferenced, bitpos, subNodeNew)
205205
} else {

0 commit comments

Comments
 (0)