@@ -39,17 +39,14 @@ func mapaccess1_fast32(t *maptype, h *hmap, key uint32) unsafe.Pointer {
39
39
}
40
40
}
41
41
}
42
- for {
42
+ for ; b != nil ; b = b . overflow ( t ) {
43
43
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 4 ) {
44
44
if * (* uint32 )(k ) == key && b .tophash [i ] != empty {
45
45
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 4 + i * uintptr (t .valuesize ))
46
46
}
47
47
}
48
- b = b .overflow (t )
49
- if b == nil {
50
- return unsafe .Pointer (& zeroVal [0 ])
51
- }
52
48
}
49
+ return unsafe .Pointer (& zeroVal [0 ])
53
50
}
54
51
55
52
func mapaccess2_fast32 (t * maptype , h * hmap , key uint32 ) (unsafe.Pointer , bool ) {
@@ -82,17 +79,14 @@ func mapaccess2_fast32(t *maptype, h *hmap, key uint32) (unsafe.Pointer, bool) {
82
79
}
83
80
}
84
81
}
85
- for {
82
+ for ; b != nil ; b = b . overflow ( t ) {
86
83
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 4 ) {
87
84
if * (* uint32 )(k ) == key && b .tophash [i ] != empty {
88
85
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 4 + i * uintptr (t .valuesize )), true
89
86
}
90
87
}
91
- b = b .overflow (t )
92
- if b == nil {
93
- return unsafe .Pointer (& zeroVal [0 ]), false
94
- }
95
88
}
89
+ return unsafe .Pointer (& zeroVal [0 ]), false
96
90
}
97
91
98
92
func mapaccess1_fast64 (t * maptype , h * hmap , key uint64 ) unsafe.Pointer {
@@ -125,17 +119,14 @@ func mapaccess1_fast64(t *maptype, h *hmap, key uint64) unsafe.Pointer {
125
119
}
126
120
}
127
121
}
128
- for {
122
+ for ; b != nil ; b = b . overflow ( t ) {
129
123
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 8 ) {
130
124
if * (* uint64 )(k ) == key && b .tophash [i ] != empty {
131
125
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 8 + i * uintptr (t .valuesize ))
132
126
}
133
127
}
134
- b = b .overflow (t )
135
- if b == nil {
136
- return unsafe .Pointer (& zeroVal [0 ])
137
- }
138
128
}
129
+ return unsafe .Pointer (& zeroVal [0 ])
139
130
}
140
131
141
132
func mapaccess2_fast64 (t * maptype , h * hmap , key uint64 ) (unsafe.Pointer , bool ) {
@@ -168,17 +159,14 @@ func mapaccess2_fast64(t *maptype, h *hmap, key uint64) (unsafe.Pointer, bool) {
168
159
}
169
160
}
170
161
}
171
- for {
162
+ for ; b != nil ; b = b . overflow ( t ) {
172
163
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 8 ) {
173
164
if * (* uint64 )(k ) == key && b .tophash [i ] != empty {
174
165
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 8 + i * uintptr (t .valuesize )), true
175
166
}
176
167
}
177
- b = b .overflow (t )
178
- if b == nil {
179
- return unsafe .Pointer (& zeroVal [0 ]), false
180
- }
181
168
}
169
+ return unsafe .Pointer (& zeroVal [0 ]), false
182
170
}
183
171
184
172
func mapaccess1_faststr (t * maptype , h * hmap , ky string ) unsafe.Pointer {
@@ -256,7 +244,7 @@ dohash:
256
244
}
257
245
}
258
246
top := tophash (hash )
259
- for {
247
+ for ; b != nil ; b = b . overflow ( t ) {
260
248
for i , kptr := uintptr (0 ), b .keys (); i < bucketCnt ; i , kptr = i + 1 , add (kptr , 2 * sys .PtrSize ) {
261
249
k := (* stringStruct )(kptr )
262
250
if k .len != key .len || b .tophash [i ] != top {
@@ -266,11 +254,8 @@ dohash:
266
254
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 2 * sys .PtrSize + i * uintptr (t .valuesize ))
267
255
}
268
256
}
269
- b = b .overflow (t )
270
- if b == nil {
271
- return unsafe .Pointer (& zeroVal [0 ])
272
- }
273
257
}
258
+ return unsafe .Pointer (& zeroVal [0 ])
274
259
}
275
260
276
261
func mapaccess2_faststr (t * maptype , h * hmap , ky string ) (unsafe.Pointer , bool ) {
@@ -348,7 +333,7 @@ dohash:
348
333
}
349
334
}
350
335
top := tophash (hash )
351
- for {
336
+ for ; b != nil ; b = b . overflow ( t ) {
352
337
for i , kptr := uintptr (0 ), b .keys (); i < bucketCnt ; i , kptr = i + 1 , add (kptr , 2 * sys .PtrSize ) {
353
338
k := (* stringStruct )(kptr )
354
339
if k .len != key .len || b .tophash [i ] != top {
@@ -358,11 +343,8 @@ dohash:
358
343
return add (unsafe .Pointer (b ), dataOffset + bucketCnt * 2 * sys .PtrSize + i * uintptr (t .valuesize )), true
359
344
}
360
345
}
361
- b = b .overflow (t )
362
- if b == nil {
363
- return unsafe .Pointer (& zeroVal [0 ]), false
364
- }
365
346
}
347
+ return unsafe .Pointer (& zeroVal [0 ]), false
366
348
}
367
349
368
350
func mapassign_fast32 (t * maptype , h * hmap , key uint32 ) unsafe.Pointer {
@@ -647,7 +629,8 @@ func mapdelete_fast32(t *maptype, h *hmap, key uint32) {
647
629
growWork (t , h , bucket )
648
630
}
649
631
b := (* bmap )(add (h .buckets , bucket * uintptr (t .bucketsize )))
650
- for {
632
+ search:
633
+ for ; b != nil ; b = b .overflow (t ) {
651
634
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 4 ) {
652
635
if key != * (* uint32 )(k ) || b .tophash [i ] == empty {
653
636
continue
@@ -663,15 +646,10 @@ func mapdelete_fast32(t *maptype, h *hmap, key uint32) {
663
646
}
664
647
b .tophash [i ] = empty
665
648
h .count --
666
- goto done
667
- }
668
- b = b .overflow (t )
669
- if b == nil {
670
- goto done
649
+ break search
671
650
}
672
651
}
673
652
674
- done:
675
653
if h .flags & hashWriting == 0 {
676
654
throw ("concurrent map writes" )
677
655
}
@@ -700,7 +678,8 @@ func mapdelete_fast64(t *maptype, h *hmap, key uint64) {
700
678
growWork (t , h , bucket )
701
679
}
702
680
b := (* bmap )(add (h .buckets , bucket * uintptr (t .bucketsize )))
703
- for {
681
+ search:
682
+ for ; b != nil ; b = b .overflow (t ) {
704
683
for i , k := uintptr (0 ), b .keys (); i < bucketCnt ; i , k = i + 1 , add (k , 8 ) {
705
684
if key != * (* uint64 )(k ) || b .tophash [i ] == empty {
706
685
continue
@@ -716,15 +695,10 @@ func mapdelete_fast64(t *maptype, h *hmap, key uint64) {
716
695
}
717
696
b .tophash [i ] = empty
718
697
h .count --
719
- goto done
720
- }
721
- b = b .overflow (t )
722
- if b == nil {
723
- goto done
698
+ break search
724
699
}
725
700
}
726
701
727
- done:
728
702
if h .flags & hashWriting == 0 {
729
703
throw ("concurrent map writes" )
730
704
}
@@ -755,7 +729,8 @@ func mapdelete_faststr(t *maptype, h *hmap, ky string) {
755
729
}
756
730
b := (* bmap )(add (h .buckets , bucket * uintptr (t .bucketsize )))
757
731
top := tophash (hash )
758
- for {
732
+ search:
733
+ for ; b != nil ; b = b .overflow (t ) {
759
734
for i , kptr := uintptr (0 ), b .keys (); i < bucketCnt ; i , kptr = i + 1 , add (kptr , 2 * sys .PtrSize ) {
760
735
k := (* stringStruct )(kptr )
761
736
if k .len != key .len || b .tophash [i ] != top {
@@ -772,15 +747,10 @@ func mapdelete_faststr(t *maptype, h *hmap, ky string) {
772
747
}
773
748
b .tophash [i ] = empty
774
749
h .count --
775
- goto done
776
- }
777
- b = b .overflow (t )
778
- if b == nil {
779
- goto done
750
+ break search
780
751
}
781
752
}
782
753
783
- done:
784
754
if h .flags & hashWriting == 0 {
785
755
throw ("concurrent map writes" )
786
756
}
0 commit comments