@@ -17,7 +17,8 @@ func (pool *Pool) tickBitmapFlipTick(
17
17
) {
18
18
require(tick%tickSpacing == 0, ufmt.Sprintf("[POOL] tick_bitmap.gno__tickBitmapFlipTick() || tick(%d) MOD tickSpacing(%d) != 0 (got:%d)", tick, tickSpacing, tick%tickSpacing))
19
19
wordPos, bitPos := tickBitmapPosition(tick / tickSpacing)
20
- mask := bigint(1) << uint64(bitPos)
20
+ mask := bigint(1) << uint64(bitPos) // 2 ** bitPos
21
+
21
22
requireUnsigned(mask, ufmt.Sprintf("[POOL] tick_bitmap.gno__tickBitmapFlipTick() || mask(%d) > 0", mask))
22
23
23
24
pool.tickBitmaps[wordPos] ^= mask
@@ -55,18 +56,10 @@ func (pool *Pool) tickBitmapNextInitializedTickWithInOneWord(
55
56
56
57
wordPos, bitPos := tickBitmapPosition(compress + 1)
57
58
58
- // check zero
59
- var mask bigint
60
- if bitPos == 0 {
61
- mask = MAX_UINT256 - bigint(1)
62
- } else {
63
- mask = MAX_UINT256 - (bigint(1)<<uint64(uint64(bitPos)) - 1)
64
- }
59
+ _mask := bigint(1) << uint64(bitPos)
60
+ _mask -= bigint(1)
61
+ mask := bigintBitwiseNotForUint256BitmapIndexing(_mask)
65
62
66
- // mask := ^((bigint(1) << bitPos) - bigint(1)) // (2^256-1) - (2^bitPos-1)
67
- if mask < 0 {
68
- mask = -mask
69
- }
70
63
requireUnsigned(mask, ufmt.Sprintf("[POOL] tick_bitmap.gno__tickBitmapNextInitializedTickWithInOneWord__mask(%d) >= 0__#2", mask))
71
64
72
65
masked := pool.tickBitmaps[wordPos] & mask
@@ -81,3 +74,14 @@ func (pool *Pool) tickBitmapNextInitializedTickWithInOneWord(
81
74
return next, initialized
82
75
}
83
76
}
77
+
78
+
79
+ func bigintBitwiseNotForUint256BitmapIndexing(x bigint) bigint {
80
+ // Create a mask with all bits set to 1
81
+ mask := MAX_UINT256
82
+ mask -= bigint(1)
83
+
84
+ // XOR with mask to perform bitwise NOT
85
+ result := x ^ mask
86
+ return result
87
+ }
0 commit comments