reftable/stack: index segments with `size_t`
We use `int`s to index into arrays of segments and track the length of them, which is considered to be a code smell in the Git project. Convert the code to use `size_t` instead. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Feb 6, 2024 at 07:35 UTC
6d5e80fba2397708671cee6d9c5e394c4c187659
3 files changed
+17
-21
reftable/stack.c
+11
-14
@@ -1202,12 +1202,11 @@ int fastlog2(uint64_t sz)
1202
return l - 1;
1203
}
1204
1205
-struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n)
1205
+struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n)
1206
{
1207
struct segment *segs = reftable_calloc(n, sizeof(*segs));
1208
- int next = 0;
1208
struct segment cur = { 0 };
1210
- int i = 0;
1209
+ size_t next = 0, i;
1210
1211
if (n == 0) {
1212
*seglen = 0;
@@ -1233,29 +1232,27 @@ struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n)
1232
return segs;
1233
}
1234
1236
-struct segment suggest_compaction_segment(uint64_t *sizes, int n)
1235
+struct segment suggest_compaction_segment(uint64_t *sizes, size_t n)
1236
{
1238
- int seglen = 0;
1239
- struct segment *segs = sizes_to_segments(&seglen, sizes, n);
1237
struct segment min_seg = {
1238
.log = 64,
1239
};
1243
- int i = 0;
1240
+ struct segment *segs;
1241
+ size_t seglen = 0, i;
1242
+
1243
+ segs = sizes_to_segments(&seglen, sizes, n);
1244
for (i = 0; i < seglen; i++) {
1245
- if (segment_size(&segs[i]) == 1) {
1245
+ if (segment_size(&segs[i]) == 1)
1246
continue;
1247
- }
1247
1249
- if (segs[i].log < min_seg.log) {
1248
+ if (segs[i].log < min_seg.log)
1249
min_seg = segs[i];
1251
- }
1250
}
1251
1252
while (min_seg.start > 0) {
1255
- int prev = min_seg.start - 1;
1256
- if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev])) {
1253
+ size_t prev = min_seg.start - 1;
1254
+ if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev]))
1255
break;
1258
- }
1256
1257
min_seg.start = prev;
1258
min_seg.bytes += sizes[prev];
reftable/stack.h
+3
-3
@@ -32,13 +32,13 @@ struct reftable_stack {
32
int read_lines(const char *filename, char ***lines);
33
34
struct segment {
35
- int start, end;
35
+ size_t start, end;
36
int log;
37
uint64_t bytes;
38
};
39
40
int fastlog2(uint64_t sz);
41
-struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n);
42
-struct segment suggest_compaction_segment(uint64_t *sizes, int n);
41
+struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n);
42
+struct segment suggest_compaction_segment(uint64_t *sizes, size_t n);
43
44
#endif
reftable/stack_test.c
+3
-4
@@ -711,7 +711,7 @@ static void test_sizes_to_segments(void)
711
uint64_t sizes[] = { 2, 3, 4, 5, 7, 9 };
712
/* .................0 1 2 3 4 5 */
713
714
- int seglen = 0;
714
+ size_t seglen = 0;
715
struct segment *segs =
716
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
717
EXPECT(segs[2].log == 3);
@@ -726,7 +726,7 @@ static void test_sizes_to_segments(void)
726
727
static void test_sizes_to_segments_empty(void)
728
{
729
- int seglen = 0;
729
+ size_t seglen = 0;
730
struct segment *segs = sizes_to_segments(&seglen, NULL, 0);
731
EXPECT(seglen == 0);
732
reftable_free(segs);
@@ -735,8 +735,7 @@ static void test_sizes_to_segments_empty(void)
735
static void test_sizes_to_segments_all_equal(void)
736
{
737
uint64_t sizes[] = { 5, 5 };
738
-
739
- int seglen = 0;
738
+ size_t seglen = 0;
739
struct segment *segs =
740
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
741
EXPECT(seglen == 1);