perf(lib): do not save unchanged database files
This commit is contained in:
parent
2d41da9a8c
commit
d8c43c7855
@ -20,6 +20,9 @@ typedef struct tanabata {
|
||||
Sasahyou sasahyou; // Sasahyou struct
|
||||
Sappyou sappyou; // Sappyou struct
|
||||
Shoppyou shoppyou; // Shoppyou struct
|
||||
_Bool sasahyou_mod; // Sasahyou modified flag
|
||||
_Bool sappyou_mod; // Sappyou modified flag
|
||||
_Bool shoppyou_mod; // Shoppyou modified flag
|
||||
} Tanabata;
|
||||
|
||||
// ==================== DATABASE SECTION ==================== //
|
||||
|
||||
@ -14,6 +14,9 @@ int tanabata_init(Tanabata *tanabata) {
|
||||
if (shoppyou_init(&tanabata->shoppyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = 1;
|
||||
tanabata->sappyou_mod = 1;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -51,6 +54,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
tanabata->shoppyou.hole_cnt = 0;
|
||||
free(tanabata->shoppyou.holes);
|
||||
tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari));
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
if (tanabata->sasahyou.hole_cnt > 0) {
|
||||
hole_cnt = 0;
|
||||
@ -63,6 +67,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == current_sasa->id) {
|
||||
current_kazari->sasa_id = new_id;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
@ -78,6 +83,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
tanabata->sasahyou.hole_cnt = 0;
|
||||
free(tanabata->sasahyou.holes);
|
||||
tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa));
|
||||
tanabata->sasahyou_mod = 1;
|
||||
}
|
||||
if (tanabata->sappyou.hole_cnt > 0) {
|
||||
hole_cnt = 0;
|
||||
@ -90,6 +96,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->tanzaku_id == current_tanzaku->id) {
|
||||
current_kazari->tanzaku_id = new_id;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
@ -105,6 +112,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
tanabata->sappyou.hole_cnt = 0;
|
||||
free(tanabata->sappyou.holes);
|
||||
tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku));
|
||||
tanabata->sappyou_mod = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -119,19 +127,25 @@ int tanabata_load(Tanabata *tanabata) {
|
||||
if (shoppyou_load(&tanabata->shoppyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = 0;
|
||||
tanabata->sappyou_mod = 0;
|
||||
tanabata->shoppyou_mod = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tanabata_save(Tanabata *tanabata) {
|
||||
if (sasahyou_save(&tanabata->sasahyou) != 0) {
|
||||
if (tanabata->sasahyou_mod && sasahyou_save(&tanabata->sasahyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
if (sappyou_save(&tanabata->sappyou) != 0) {
|
||||
if (tanabata->sappyou_mod && sappyou_save(&tanabata->sappyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
if (shoppyou_save(&tanabata->shoppyou) != 0) {
|
||||
if (tanabata->shoppyou_mod && shoppyou_save(&tanabata->shoppyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = 0;
|
||||
tanabata->sappyou_mod = 0;
|
||||
tanabata->shoppyou_mod = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -154,6 +168,9 @@ int tanabata_open(Tanabata *tanabata, const char *path) {
|
||||
return 1;
|
||||
}
|
||||
free(file_path);
|
||||
tanabata->sasahyou_mod = 0;
|
||||
tanabata->sappyou_mod = 0;
|
||||
tanabata->shoppyou_mod = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -163,18 +180,27 @@ int tanabata_dump(Tanabata *tanabata, const char *path) {
|
||||
return 1;
|
||||
}
|
||||
char *file_path = malloc(strlen(path) + 10);
|
||||
if (tanabata->sasahyou_mod) {
|
||||
strcpy(file_path, path);
|
||||
if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = 0;
|
||||
}
|
||||
if (tanabata->sappyou_mod) {
|
||||
strcpy(file_path, path);
|
||||
if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sappyou_mod = 0;
|
||||
}
|
||||
if (tanabata->shoppyou_mod) {
|
||||
strcpy(file_path, path);
|
||||
if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->shoppyou_mod = 0;
|
||||
}
|
||||
free(file_path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
12
lib/kazari.c
12
lib/kazari.c
@ -14,11 +14,19 @@ int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_i
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
if (kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id) == 0) {
|
||||
tanabata->shoppyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tanabata_kazari_rem(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id) {
|
||||
return kazari_rem(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
if (kazari_rem(&tanabata->shoppyou, sasa_id, tanzaku_id) == 0) {
|
||||
tanabata->shoppyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
|
||||
19
lib/sasa.c
19
lib/sasa.c
@ -16,8 +16,9 @@ int tanabata_sasa_add(Tanabata *tanabata, const char *path) {
|
||||
}
|
||||
char *abspath = NULL;
|
||||
abspath = realpath(path, abspath);
|
||||
if (abspath != NULL) {
|
||||
return sasa_add(&tanabata->sasahyou, abspath);
|
||||
if (abspath != NULL && sasa_add(&tanabata->sasahyou, abspath) == 0) {
|
||||
tanabata->sasahyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -30,10 +31,15 @@ int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == sasa_id) {
|
||||
current_kazari->sasa_id = HOLE_ID;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return sasa_rem(&tanabata->sasahyou, sasa_id);
|
||||
if (sasa_rem(&tanabata->sasahyou, sasa_id) == 0) {
|
||||
tanabata->sasahyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) {
|
||||
@ -44,10 +50,15 @@ int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) {
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == current_sasa->id) {
|
||||
current_kazari->sasa_id = HOLE_ID;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return sasa_rem(&tanabata->sasahyou, current_sasa->id);
|
||||
if (sasa_rem(&tanabata->sasahyou, current_sasa->id) == 0) {
|
||||
tanabata->sasahyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
|
||||
@ -13,7 +13,11 @@ int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *descr
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
return tanzaku_add(&tanabata->sappyou, name, description);
|
||||
if (tanzaku_add(&tanabata->sappyou, name, description) == 0) {
|
||||
tanabata->sappyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
@ -24,10 +28,15 @@ int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
if (current_kazari->tanzaku_id == tanzaku_id) {
|
||||
current_kazari->tanzaku_id = HOLE_ID;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return tanzaku_rem(&tanabata->sappyou, tanzaku_id);
|
||||
if (tanzaku_rem(&tanabata->sappyou, tanzaku_id) == 0) {
|
||||
tanabata->sappyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) {
|
||||
@ -38,10 +47,15 @@ int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) {
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->tanzaku_id == current_tanzaku->id) {
|
||||
current_kazari->tanzaku_id = HOLE_ID;
|
||||
tanabata->shoppyou_mod = 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return tanzaku_rem(&tanabata->sappyou, current_tanzaku->id);
|
||||
if (tanzaku_rem(&tanabata->sappyou, current_tanzaku->id) == 0) {
|
||||
tanabata->sappyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user