From 94aa95847135b6c708386586b69f163ae19ee57f Mon Sep 17 00:00:00 2001 From: Masahiko AMANO Date: Fri, 30 Dec 2022 18:09:50 +0300 Subject: [PATCH] perf(lib): weeding also removes kazari with invalid sasa or tanzaku ID --- lib/database.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/database.c b/lib/database.c index 707c131..ddcf284 100644 --- a/lib/database.c +++ b/lib/database.c @@ -65,19 +65,21 @@ int tanabata_weed(Tanabata *tanabata) { tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa)); tanabata->sasahyou.modified_ts = time(NULL); } - if (tanabata->shoppyou.hole_cnt > 0) { - hole_cnt = 0; - current_kazari = tanabata->shoppyou.database; - for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { - if (current_kazari->sasa_id != HOLE_ID && current_kazari->tanzaku_id != HOLE_ID) { - if (hole_cnt > 0) { - *(current_kazari - hole_cnt) = *current_kazari; - } - } else { - hole_cnt++; + hole_cnt = 0; + current_kazari = tanabata->shoppyou.database; + for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { + if (current_kazari->sasa_id != HOLE_ID && current_kazari->tanzaku_id != HOLE_ID && + current_kazari->sasa_id < tanabata->sasahyou.size && + current_kazari->tanzaku_id < tanabata->sappyou.size) { + if (hole_cnt > 0) { + *(current_kazari - hole_cnt) = *current_kazari; } - current_kazari++; + } else { + hole_cnt++; } + current_kazari++; + } + if (hole_cnt > 0) { tanabata->shoppyou.size -= tanabata->shoppyou.hole_cnt; tanabata->shoppyou.hole_cnt = 0; free(tanabata->shoppyou.holes);