From 3bca700ab6bb215bf5fad0fc1198d07eeac35793 Mon Sep 17 00:00:00 2001 From: Masahiko AMANO Date: Sat, 24 Dec 2022 20:46:39 +0300 Subject: [PATCH] perf(lib): some minor improvements --- src/tanabata/database.c | 96 +++++++++++++++++++++++++---------------- src/tanabata/kazari.c | 25 +++++++---- src/tanabata/sasa.c | 14 +++--- src/tanabata/tanzaku.c | 12 ++++-- 4 files changed, 94 insertions(+), 53 deletions(-) diff --git a/src/tanabata/database.c b/src/tanabata/database.c index b2f8625..bdbe402 100644 --- a/src/tanabata/database.c +++ b/src/tanabata/database.c @@ -5,21 +5,29 @@ #include "../../include/tanabata.h" int tanabata_init(Tanabata *tanabata) { - int status = 0; - status |= sasahyou_init(&tanabata->sasahyou); - status |= sappyou_init(&tanabata->sappyou); - status |= shoppyou_init(&tanabata->shoppyou); - - return status; + if (sasahyou_init(&tanabata->sasahyou) != 0) { + return 1; + } + if (sappyou_init(&tanabata->sappyou) != 0) { + return 1; + } + if (shoppyou_init(&tanabata->shoppyou) != 0) { + return 1; + } + return 0; } int tanabata_free(Tanabata *tanabata) { - int status = 0; - status |= sasahyou_free(&tanabata->sasahyou); - status |= sappyou_free(&tanabata->sappyou); - status |= shoppyou_free(&tanabata->shoppyou); - - return status; + if (sasahyou_free(&tanabata->sasahyou) != 0) { + return 1; + } + if (sappyou_free(&tanabata->sappyou) != 0) { + return 1; + } + if (shoppyou_free(&tanabata->shoppyou) != 0) { + return 1; + } + return 0; } int tanabata_weed(Tanabata *tanabata) { @@ -32,21 +40,29 @@ int tanabata_weed(Tanabata *tanabata) { } int tanabata_load(Tanabata *tanabata) { - int status = 0; - status |= sasahyou_load(&tanabata->sasahyou); - status |= sappyou_load(&tanabata->sappyou); - status |= shoppyou_load(&tanabata->shoppyou); - - return status; + if (sasahyou_load(&tanabata->sasahyou) != 0) { + return 1; + } + if (sappyou_load(&tanabata->sappyou) != 0) { + return 1; + } + if (shoppyou_load(&tanabata->shoppyou) != 0) { + return 1; + } + return 0; } int tanabata_save(Tanabata *tanabata) { - int status = 0; - status |= sasahyou_save(&tanabata->sasahyou); - status |= sappyou_save(&tanabata->sappyou); - status |= shoppyou_save(&tanabata->shoppyou); - - return status; + if (sasahyou_save(&tanabata->sasahyou) != 0) { + return 1; + } + if (sappyou_save(&tanabata->sappyou) != 0) { + return 1; + } + if (shoppyou_save(&tanabata->shoppyou) != 0) { + return 1; + } + return 0; } int tanabata_open(Tanabata *tanabata, const char *path) { @@ -54,17 +70,21 @@ int tanabata_open(Tanabata *tanabata, const char *path) { if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) { return 1; } - int status = 0; char *file_path = malloc(strlen(path) + 10); strcpy(file_path, path); - status |= sasahyou_open(&tanabata->sasahyou, strcat(file_path, "/sasahyou")); + if (sasahyou_open(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) { + return 1; + } strcpy(file_path, path); - status |= sappyou_open(&tanabata->sappyou, strcat(file_path, "/sappyou")); + if (sappyou_open(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) { + return 1; + } strcpy(file_path, path); - status |= shoppyou_open(&tanabata->shoppyou, strcat(file_path, "/shoppyou")); + if (shoppyou_open(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) { + return 1; + } free(file_path); - - return status; + return 0; } int tanabata_dump(Tanabata *tanabata, const char *path) { @@ -72,15 +92,19 @@ int tanabata_dump(Tanabata *tanabata, const char *path) { if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) { return 1; } - int status = 0; char *file_path = malloc(strlen(path) + 10); strcpy(file_path, path); - status |= sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")); + if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) { + return 1; + } strcpy(file_path, path); - status |= sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")); + if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) { + return 1; + } strcpy(file_path, path); - status |= shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")); + if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) { + return 1; + } free(file_path); - - return status; + return 0; } diff --git a/src/tanabata/kazari.c b/src/tanabata/kazari.c index 1700872..6700612 100644 --- a/src/tanabata/kazari.c +++ b/src/tanabata/kazari.c @@ -3,11 +3,18 @@ #include "../../include/tanabata.h" int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id) { + if (sasa_id >= tanabata->sasahyou.size) { + return 1; + } + if (tanzaku_id >= tanabata->sappyou.size) { + return 1; + } + Kazari *current_kazari = tanabata->shoppyou.database; for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { - if (tanabata->shoppyou.database[i].sasa_id == sasa_id && - tanabata->shoppyou.database[i].tanzaku_id == tanzaku_id) { + if (current_kazari->sasa_id == sasa_id && current_kazari->tanzaku_id == tanzaku_id) { return 1; } + current_kazari++; } return kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id); } @@ -22,13 +29,14 @@ Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id) { } Tanzaku *tanzaku_list = NULL; uint64_t tanzaku_count = 0; + Kazari *current_kazari = tanabata->shoppyou.database; for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { - if (tanabata->shoppyou.database[i].sasa_id == sasa_id) { + if (current_kazari->sasa_id == sasa_id) { tanzaku_count++; tanzaku_list = realloc(tanzaku_list, tanzaku_count * sizeof(Tanzaku)); - tanzaku_list[tanzaku_count - 1] = \ - tanabata_tanzaku_get_by_id(tanabata, tanabata->shoppyou.database[i].tanzaku_id); + tanzaku_list[tanzaku_count - 1] = tanabata_tanzaku_get_by_id(tanabata, current_kazari->tanzaku_id); } + current_kazari++; } if (tanzaku_list != NULL) { tanzaku_list = realloc(tanzaku_list, (tanzaku_count + 1) * sizeof(Tanzaku)); @@ -43,13 +51,14 @@ Sasa *tanabata_sasa_get_by_tanzaku(Tanabata *tanabata, uint64_t tanzaku_id) { } Sasa *sasa_list = NULL; uint64_t sasa_count = 0; + Kazari *current_kazari = tanabata->shoppyou.database; for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { - if (tanabata->shoppyou.database[i].tanzaku_id == tanzaku_id) { + if (current_kazari->tanzaku_id == tanzaku_id) { sasa_count++; sasa_list = realloc(sasa_list, sasa_count * sizeof(Sasa)); - sasa_list[sasa_count - 1] = \ - tanabata_sasa_get_by_id(tanabata, tanabata->shoppyou.database[i].sasa_id); + sasa_list[sasa_count - 1] = tanabata_sasa_get_by_id(tanabata, current_kazari->sasa_id); } + current_kazari++; } if (sasa_list != NULL) { sasa_list = realloc(sasa_list, (sasa_count + 1) * sizeof(Sasa)); diff --git a/src/tanabata/sasa.c b/src/tanabata/sasa.c index cf5435a..6573a59 100644 --- a/src/tanabata/sasa.c +++ b/src/tanabata/sasa.c @@ -4,10 +4,12 @@ #include "../../include/tanabata.h" int tanabata_sasa_add(Tanabata *tanabata, const char *path) { + Sasa *current_sasa = tanabata->sasahyou.database; for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) { - if (tanabata->sasahyou.database[i].id != HOLE_ID && strcmp(tanabata->sasahyou.database[i].path, path) == 0) { + if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) { return 1; } + current_sasa++; } char *abspath = NULL; abspath = realpath(path, abspath); @@ -22,12 +24,12 @@ int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) { } int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) { - Sasa *current_sasa; + Sasa *current_sasa = tanabata->sasahyou.database; for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) { - current_sasa = tanabata->sasahyou.database + i; if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) { return sasa_rem(&tanabata->sasahyou, current_sasa->id); } + current_sasa++; } return 1; } @@ -48,10 +50,12 @@ Sasa tanabata_sasa_get_by_path(Tanabata *tanabata, const char *path) { if (abspath == NULL) { return HOLE_SASA; } + Sasa *current_sasa = tanabata->sasahyou.database; for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) { - if (tanabata->sasahyou.database[i].id != HOLE_ID && strcmp(tanabata->sasahyou.database[i].path, abspath) == 0) { - return tanabata->sasahyou.database[i]; + if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, abspath) == 0) { + return *current_sasa; } + current_sasa++; } return HOLE_SASA; } diff --git a/src/tanabata/tanzaku.c b/src/tanabata/tanzaku.c index 22d812a..474999d 100644 --- a/src/tanabata/tanzaku.c +++ b/src/tanabata/tanzaku.c @@ -2,10 +2,12 @@ #include "../../include/tanabata.h" int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *description) { + Tanzaku *current_tanzaku = tanabata->sappyou.database; for (uint64_t i = 0; i < tanabata->sappyou.size; i++) { - if (tanabata->sappyou.database[i].id != HOLE_ID && strcmp(tanabata->sappyou.database[i].name, name) == 0) { + if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) { return 1; } + current_tanzaku++; } return tanzaku_add(&tanabata->sappyou, name, description); } @@ -15,12 +17,12 @@ int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) { } int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) { - Tanzaku *current_tanzaku; + Tanzaku *current_tanzaku = tanabata->sappyou.database; for (uint64_t i = 0; i < tanabata->sappyou.size; i++) { - current_tanzaku = tanabata->sappyou.database + i; if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) { return tanzaku_rem(&tanabata->sappyou, current_tanzaku->id); } + current_tanzaku++; } return 1; } @@ -36,10 +38,12 @@ Tanzaku tanabata_tanzaku_get_by_id(Tanabata *tanabata, uint64_t tanzaku_id) { } Tanzaku tanabata_tanzaku_get_by_name(Tanabata *tanabata, const char *name) { + Tanzaku *current_tanzaku = tanabata->sappyou.database; for (uint64_t i = 0; i < tanabata->sappyou.size; i++) { - if (tanabata->sappyou.database[i].id != HOLE_ID && strcmp(tanabata->sappyou.database[i].name, name) == 0) { + if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) { return tanabata->sappyou.database[i]; } + current_tanzaku++; } return HOLE_TANZAKU; }