perf(lib): tanabata struct holds the hyou last modification timestamps instead of bools
This commit is contained in:
parent
873d6d487b
commit
57623cff61
@ -20,9 +20,9 @@ typedef struct tanabata {
|
|||||||
Sasahyou sasahyou; // Sasahyou struct
|
Sasahyou sasahyou; // Sasahyou struct
|
||||||
Sappyou sappyou; // Sappyou struct
|
Sappyou sappyou; // Sappyou struct
|
||||||
Shoppyou shoppyou; // Shoppyou struct
|
Shoppyou shoppyou; // Shoppyou struct
|
||||||
_Bool sasahyou_mod; // Sasahyou modified flag
|
uint64_t sasahyou_mod; // Sasahyou file last modificaton timestamp
|
||||||
_Bool sappyou_mod; // Sappyou modified flag
|
uint64_t sappyou_mod; // Sappyou file last modificaton timestamp
|
||||||
_Bool shoppyou_mod; // Shoppyou modified flag
|
uint64_t shoppyou_mod; // Shoppyou file last modificaton timestamp
|
||||||
} Tanabata;
|
} Tanabata;
|
||||||
|
|
||||||
// ==================== DATABASE SECTION ==================== //
|
// ==================== DATABASE SECTION ==================== //
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "../include/tanabata.h"
|
#include "../include/tanabata.h"
|
||||||
|
|
||||||
@ -14,9 +15,9 @@ int tanabata_init(Tanabata *tanabata) {
|
|||||||
if (shoppyou_init(&tanabata->shoppyou) != 0) {
|
if (shoppyou_init(&tanabata->shoppyou) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->sasahyou_mod = 1;
|
tanabata->sasahyou_mod = 0;
|
||||||
tanabata->sappyou_mod = 1;
|
tanabata->sappyou_mod = 0;
|
||||||
tanabata->shoppyou_mod = 1;
|
tanabata->shoppyou_mod = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,8 +37,8 @@ int tanabata_free(Tanabata *tanabata) {
|
|||||||
int tanabata_weed(Tanabata *tanabata) {
|
int tanabata_weed(Tanabata *tanabata) {
|
||||||
uint64_t hole_cnt;
|
uint64_t hole_cnt;
|
||||||
uint64_t new_id;
|
uint64_t new_id;
|
||||||
Kazari *current_kazari;
|
|
||||||
if (tanabata->shoppyou.hole_cnt > 0) {
|
if (tanabata->shoppyou.hole_cnt > 0) {
|
||||||
|
Kazari *current_kazari;
|
||||||
hole_cnt = 0;
|
hole_cnt = 0;
|
||||||
current_kazari = tanabata->shoppyou.database;
|
current_kazari = tanabata->shoppyou.database;
|
||||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||||
@ -54,7 +55,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
|||||||
tanabata->shoppyou.hole_cnt = 0;
|
tanabata->shoppyou.hole_cnt = 0;
|
||||||
free(tanabata->shoppyou.holes);
|
free(tanabata->shoppyou.holes);
|
||||||
tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari));
|
tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari));
|
||||||
tanabata->shoppyou_mod = 1;
|
tanabata->shoppyou.modified_ts = time(NULL);
|
||||||
}
|
}
|
||||||
if (tanabata->sasahyou.hole_cnt > 0) {
|
if (tanabata->sasahyou.hole_cnt > 0) {
|
||||||
hole_cnt = 0;
|
hole_cnt = 0;
|
||||||
@ -76,7 +77,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
|||||||
tanabata->sasahyou.hole_cnt = 0;
|
tanabata->sasahyou.hole_cnt = 0;
|
||||||
free(tanabata->sasahyou.holes);
|
free(tanabata->sasahyou.holes);
|
||||||
tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa));
|
tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa));
|
||||||
tanabata->sasahyou_mod = 1;
|
tanabata->sasahyou.modified_ts = time(NULL);
|
||||||
}
|
}
|
||||||
if (tanabata->sappyou.hole_cnt > 0) {
|
if (tanabata->sappyou.hole_cnt > 0) {
|
||||||
hole_cnt = 0;
|
hole_cnt = 0;
|
||||||
@ -98,7 +99,7 @@ int tanabata_weed(Tanabata *tanabata) {
|
|||||||
tanabata->sappyou.hole_cnt = 0;
|
tanabata->sappyou.hole_cnt = 0;
|
||||||
free(tanabata->sappyou.holes);
|
free(tanabata->sappyou.holes);
|
||||||
tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku));
|
tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku));
|
||||||
tanabata->sappyou_mod = 1;
|
tanabata->sappyou.modified_ts = time(NULL);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -113,25 +114,25 @@ int tanabata_load(Tanabata *tanabata) {
|
|||||||
if (shoppyou_load(&tanabata->shoppyou) != 0) {
|
if (shoppyou_load(&tanabata->shoppyou) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->sasahyou_mod = 0;
|
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||||
tanabata->sappyou_mod = 0;
|
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||||
tanabata->shoppyou_mod = 0;
|
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tanabata_save(Tanabata *tanabata) {
|
int tanabata_save(Tanabata *tanabata) {
|
||||||
if (tanabata->sasahyou_mod && sasahyou_save(&tanabata->sasahyou) != 0) {
|
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts && sasahyou_save(&tanabata->sasahyou) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (tanabata->sappyou_mod && sappyou_save(&tanabata->sappyou) != 0) {
|
if (tanabata->sappyou_mod != tanabata->sappyou.modified_ts && sappyou_save(&tanabata->sappyou) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (tanabata->shoppyou_mod && shoppyou_save(&tanabata->shoppyou) != 0) {
|
if (tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts && shoppyou_save(&tanabata->shoppyou) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->sasahyou_mod = 0;
|
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||||
tanabata->sappyou_mod = 0;
|
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||||
tanabata->shoppyou_mod = 0;
|
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,9 +155,9 @@ int tanabata_open(Tanabata *tanabata, const char *path) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
free(file_path);
|
free(file_path);
|
||||||
tanabata->sasahyou_mod = 0;
|
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||||
tanabata->sappyou_mod = 0;
|
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||||
tanabata->shoppyou_mod = 0;
|
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,26 +167,26 @@ int tanabata_dump(Tanabata *tanabata, const char *path) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
char *file_path = malloc(strlen(path) + 10);
|
char *file_path = malloc(strlen(path) + 10);
|
||||||
if (tanabata->sasahyou_mod) {
|
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts) {
|
||||||
strcpy(file_path, path);
|
strcpy(file_path, path);
|
||||||
if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->sasahyou_mod = 0;
|
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||||
}
|
}
|
||||||
if (tanabata->sappyou_mod) {
|
if (tanabata->sappyou_mod != tanabata->sappyou.modified_ts) {
|
||||||
strcpy(file_path, path);
|
strcpy(file_path, path);
|
||||||
if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->sappyou_mod = 0;
|
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||||
}
|
}
|
||||||
if (tanabata->shoppyou_mod) {
|
if (tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts) {
|
||||||
strcpy(file_path, path);
|
strcpy(file_path, path);
|
||||||
if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
tanabata->shoppyou_mod = 0;
|
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||||
}
|
}
|
||||||
free(file_path);
|
free(file_path);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -16,9 +16,8 @@ int tanabata_sasa_add(Tanabata *tanabata, const char *path) {
|
|||||||
}
|
}
|
||||||
char *abspath = NULL;
|
char *abspath = NULL;
|
||||||
abspath = realpath(path, abspath);
|
abspath = realpath(path, abspath);
|
||||||
if (abspath != NULL && sasa_add(&tanabata->sasahyou, abspath) == 0) {
|
if (abspath != NULL) {
|
||||||
tanabata->sasahyou_mod = 1;
|
return sasa_add(&tanabata->sasahyou, abspath);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -29,7 +28,6 @@ int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
|||||||
}
|
}
|
||||||
if (sasa_rem(&tanabata->sasahyou, sasa_id) == 0 &&
|
if (sasa_rem(&tanabata->sasahyou, sasa_id) == 0 &&
|
||||||
kazari_rem_by_sasa(&tanabata->shoppyou, sasa_id) == 0) {
|
kazari_rem_by_sasa(&tanabata->shoppyou, sasa_id) == 0) {
|
||||||
tanabata->sasahyou_mod = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -41,7 +39,6 @@ int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) {
|
|||||||
if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) {
|
if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) {
|
||||||
if (sasa_rem(&tanabata->sasahyou, current_sasa->id) == 0 &&
|
if (sasa_rem(&tanabata->sasahyou, current_sasa->id) == 0 &&
|
||||||
kazari_rem_by_sasa(&tanabata->shoppyou, current_sasa->id) == 0) {
|
kazari_rem_by_sasa(&tanabata->shoppyou, current_sasa->id) == 0) {
|
||||||
tanabata->sasahyou_mod = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@ -13,11 +13,7 @@ int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *descr
|
|||||||
}
|
}
|
||||||
current_tanzaku++;
|
current_tanzaku++;
|
||||||
}
|
}
|
||||||
if (tanzaku_add(&tanabata->sappyou, name, description) == 0) {
|
return tanzaku_add(&tanabata->sappyou, name, description);
|
||||||
tanabata->sappyou_mod = 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||||
@ -26,7 +22,6 @@ int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
|||||||
}
|
}
|
||||||
if (tanzaku_rem(&tanabata->sappyou, tanzaku_id) == 0 &&
|
if (tanzaku_rem(&tanabata->sappyou, tanzaku_id) == 0 &&
|
||||||
kazari_rem_by_tanzaku(&tanabata->shoppyou, tanzaku_id) == 0) {
|
kazari_rem_by_tanzaku(&tanabata->shoppyou, tanzaku_id) == 0) {
|
||||||
tanabata->sappyou_mod = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -38,7 +33,6 @@ int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) {
|
|||||||
if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
||||||
if (tanzaku_rem(&tanabata->sappyou, current_tanzaku->id) == 0 &&
|
if (tanzaku_rem(&tanabata->sappyou, current_tanzaku->id) == 0 &&
|
||||||
kazari_rem_by_tanzaku(&tanabata->shoppyou, current_tanzaku->id) == 0) {
|
kazari_rem_by_tanzaku(&tanabata->shoppyou, current_tanzaku->id) == 0) {
|
||||||
tanabata->sappyou_mod = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user