| 789 | } |
| 790 | |
| 791 | class ValueNode<K, V> { |
| 792 | constructor( |
| 793 | public ownerID: OwnerID, |
| 794 | public keyHash: number | undefined, |
| 795 | public entry: [K, V] |
| 796 | ) {} |
| 797 | |
| 798 | get(shift: number, keyHash: number, key: K, notSetValue?: V) { |
| 799 | return Object.is(key, this.entry[0]) ? this.entry[1] : notSetValue |
| 800 | } |
| 801 | |
| 802 | update( |
| 803 | ownerID: OwnerID, |
| 804 | shift: number, |
| 805 | keyHash: number | undefined, |
| 806 | key: K, |
| 807 | value: V, |
| 808 | didChangeSize?: Ref, |
| 809 | didAlter?: Ref |
| 810 | ) { |
| 811 | const removed = value === NOT_SET |
| 812 | const keyMatch = Object.is(key, this.entry[0]) |
| 813 | if (keyMatch ? value === this.entry[1] : removed) { |
| 814 | return this |
| 815 | } |
| 816 | |
| 817 | SetRef(didAlter) |
| 818 | |
| 819 | if (removed) { |
| 820 | SetRef(didChangeSize) |
| 821 | return // undefined |
| 822 | } |
| 823 | |
| 824 | if (keyMatch) { |
| 825 | if (ownerID && ownerID === this.ownerID) { |
| 826 | this.entry[1] = value |
| 827 | return this |
| 828 | } |
| 829 | return new ValueNode(ownerID, this.keyHash, [key, value]) |
| 830 | } |
| 831 | |
| 832 | SetRef(didChangeSize) |
| 833 | return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]) |
| 834 | } |
| 835 | } |
| 836 | |
| 837 | // #pragma Iterators |
| 838 |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…