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>
This commit is contained in:

committed by
Junio C Hamano

parent
ca63af0a24
commit
6d5e80fba2
@ -1202,12 +1202,11 @@ int fastlog2(uint64_t sz)
|
|||||||
return l - 1;
|
return l - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n)
|
struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n)
|
||||||
{
|
{
|
||||||
struct segment *segs = reftable_calloc(n, sizeof(*segs));
|
struct segment *segs = reftable_calloc(n, sizeof(*segs));
|
||||||
int next = 0;
|
|
||||||
struct segment cur = { 0 };
|
struct segment cur = { 0 };
|
||||||
int i = 0;
|
size_t next = 0, i;
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
*seglen = 0;
|
*seglen = 0;
|
||||||
@ -1233,29 +1232,27 @@ struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n)
|
|||||||
return segs;
|
return segs;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct segment suggest_compaction_segment(uint64_t *sizes, int n)
|
struct segment suggest_compaction_segment(uint64_t *sizes, size_t n)
|
||||||
{
|
{
|
||||||
int seglen = 0;
|
|
||||||
struct segment *segs = sizes_to_segments(&seglen, sizes, n);
|
|
||||||
struct segment min_seg = {
|
struct segment min_seg = {
|
||||||
.log = 64,
|
.log = 64,
|
||||||
};
|
};
|
||||||
int i = 0;
|
struct segment *segs;
|
||||||
for (i = 0; i < seglen; i++) {
|
size_t seglen = 0, i;
|
||||||
if (segment_size(&segs[i]) == 1) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (segs[i].log < min_seg.log) {
|
segs = sizes_to_segments(&seglen, sizes, n);
|
||||||
|
for (i = 0; i < seglen; i++) {
|
||||||
|
if (segment_size(&segs[i]) == 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (segs[i].log < min_seg.log)
|
||||||
min_seg = segs[i];
|
min_seg = segs[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
while (min_seg.start > 0) {
|
while (min_seg.start > 0) {
|
||||||
int prev = min_seg.start - 1;
|
size_t prev = min_seg.start - 1;
|
||||||
if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev])) {
|
if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev]))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
min_seg.start = prev;
|
min_seg.start = prev;
|
||||||
min_seg.bytes += sizes[prev];
|
min_seg.bytes += sizes[prev];
|
||||||
|
@ -32,13 +32,13 @@ struct reftable_stack {
|
|||||||
int read_lines(const char *filename, char ***lines);
|
int read_lines(const char *filename, char ***lines);
|
||||||
|
|
||||||
struct segment {
|
struct segment {
|
||||||
int start, end;
|
size_t start, end;
|
||||||
int log;
|
int log;
|
||||||
uint64_t bytes;
|
uint64_t bytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
int fastlog2(uint64_t sz);
|
int fastlog2(uint64_t sz);
|
||||||
struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n);
|
struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n);
|
||||||
struct segment suggest_compaction_segment(uint64_t *sizes, int n);
|
struct segment suggest_compaction_segment(uint64_t *sizes, size_t n);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -711,7 +711,7 @@ static void test_sizes_to_segments(void)
|
|||||||
uint64_t sizes[] = { 2, 3, 4, 5, 7, 9 };
|
uint64_t sizes[] = { 2, 3, 4, 5, 7, 9 };
|
||||||
/* .................0 1 2 3 4 5 */
|
/* .................0 1 2 3 4 5 */
|
||||||
|
|
||||||
int seglen = 0;
|
size_t seglen = 0;
|
||||||
struct segment *segs =
|
struct segment *segs =
|
||||||
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
|
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
|
||||||
EXPECT(segs[2].log == 3);
|
EXPECT(segs[2].log == 3);
|
||||||
@ -726,7 +726,7 @@ static void test_sizes_to_segments(void)
|
|||||||
|
|
||||||
static void test_sizes_to_segments_empty(void)
|
static void test_sizes_to_segments_empty(void)
|
||||||
{
|
{
|
||||||
int seglen = 0;
|
size_t seglen = 0;
|
||||||
struct segment *segs = sizes_to_segments(&seglen, NULL, 0);
|
struct segment *segs = sizes_to_segments(&seglen, NULL, 0);
|
||||||
EXPECT(seglen == 0);
|
EXPECT(seglen == 0);
|
||||||
reftable_free(segs);
|
reftable_free(segs);
|
||||||
@ -735,8 +735,7 @@ static void test_sizes_to_segments_empty(void)
|
|||||||
static void test_sizes_to_segments_all_equal(void)
|
static void test_sizes_to_segments_all_equal(void)
|
||||||
{
|
{
|
||||||
uint64_t sizes[] = { 5, 5 };
|
uint64_t sizes[] = { 5, 5 };
|
||||||
|
size_t seglen = 0;
|
||||||
int seglen = 0;
|
|
||||||
struct segment *segs =
|
struct segment *segs =
|
||||||
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
|
sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes));
|
||||||
EXPECT(seglen == 1);
|
EXPECT(seglen == 1);
|
||||||
|
Reference in New Issue
Block a user