refactor: reorganize files
This commit is contained in:
+180
@@ -0,0 +1,180 @@
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "../include/tanabata.h"
|
||||
|
||||
int tanabata_init(Tanabata *tanabata) {
|
||||
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) {
|
||||
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) {
|
||||
uint64_t hole_cnt;
|
||||
uint64_t new_id;
|
||||
Kazari *current_kazari;
|
||||
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++;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
tanabata->shoppyou.size -= tanabata->shoppyou.hole_cnt;
|
||||
tanabata->shoppyou.hole_cnt = 0;
|
||||
free(tanabata->shoppyou.holes);
|
||||
tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari));
|
||||
}
|
||||
if (tanabata->sasahyou.hole_cnt > 0) {
|
||||
hole_cnt = 0;
|
||||
Sasa *current_sasa = tanabata->sasahyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) {
|
||||
if (current_sasa->id != HOLE_ID) {
|
||||
if (hole_cnt > 0) {
|
||||
new_id = current_sasa->id - hole_cnt;
|
||||
current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == current_sasa->id) {
|
||||
current_kazari->sasa_id = new_id;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
current_sasa->id = new_id;
|
||||
*(current_sasa - hole_cnt) = *current_sasa;
|
||||
}
|
||||
} else {
|
||||
hole_cnt++;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
tanabata->sasahyou.size -= tanabata->sasahyou.hole_cnt;
|
||||
tanabata->sasahyou.hole_cnt = 0;
|
||||
free(tanabata->sasahyou.holes);
|
||||
tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa));
|
||||
}
|
||||
if (tanabata->sappyou.hole_cnt > 0) {
|
||||
hole_cnt = 0;
|
||||
Tanzaku *current_tanzaku = tanabata->sappyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sappyou.size; i++) {
|
||||
if (current_tanzaku->id != HOLE_ID) {
|
||||
if (hole_cnt > 0) {
|
||||
new_id = current_tanzaku->id - hole_cnt;
|
||||
current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->tanzaku_id == current_tanzaku->id) {
|
||||
current_kazari->tanzaku_id = new_id;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
current_tanzaku->id = new_id;
|
||||
*(current_tanzaku - hole_cnt) = *current_tanzaku;
|
||||
} else {
|
||||
hole_cnt++;
|
||||
}
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
tanabata->sappyou.size -= tanabata->sappyou.hole_cnt;
|
||||
tanabata->sappyou.hole_cnt = 0;
|
||||
free(tanabata->sappyou.holes);
|
||||
tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tanabata_load(Tanabata *tanabata) {
|
||||
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) {
|
||||
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) {
|
||||
struct stat st;
|
||||
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||
return 1;
|
||||
}
|
||||
char *file_path = malloc(strlen(path) + 10);
|
||||
strcpy(file_path, path);
|
||||
if (sasahyou_open(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (sappyou_open(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (shoppyou_open(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
free(file_path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tanabata_dump(Tanabata *tanabata, const char *path) {
|
||||
struct stat st;
|
||||
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||
return 1;
|
||||
}
|
||||
char *file_path = malloc(strlen(path) + 10);
|
||||
strcpy(file_path, path);
|
||||
if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
free(file_path);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
#include <malloc.h>
|
||||
|
||||
#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 (current_kazari->sasa_id == sasa_id && current_kazari->tanzaku_id == tanzaku_id) {
|
||||
return 0;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
}
|
||||
|
||||
int tanabata_kazari_rem(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id) {
|
||||
return kazari_rem(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
}
|
||||
|
||||
Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_id == HOLE_ID || sasa_id >= tanabata->sasahyou.size) {
|
||||
return NULL;
|
||||
}
|
||||
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 (current_kazari->sasa_id == sasa_id && current_kazari->tanzaku_id != HOLE_ID) {
|
||||
tanzaku_count++;
|
||||
tanzaku_list = realloc(tanzaku_list, tanzaku_count * sizeof(Tanzaku));
|
||||
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));
|
||||
tanzaku_list[tanzaku_count] = HOLE_TANZAKU;
|
||||
}
|
||||
return tanzaku_list;
|
||||
}
|
||||
|
||||
Sasa *tanabata_sasa_get_by_tanzaku(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_id == HOLE_ID || tanzaku_id >= tanabata->sappyou.size) {
|
||||
return NULL;
|
||||
}
|
||||
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 (current_kazari->tanzaku_id == tanzaku_id && current_kazari->sasa_id != HOLE_ID) {
|
||||
sasa_count++;
|
||||
sasa_list = realloc(sasa_list, sasa_count * sizeof(Sasa));
|
||||
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));
|
||||
sasa_list[sasa_count] = HOLE_SASA;
|
||||
}
|
||||
return sasa_list;
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#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 (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) {
|
||||
return 1;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
char *abspath = NULL;
|
||||
abspath = realpath(path, abspath);
|
||||
if (abspath != NULL) {
|
||||
return sasa_add(&tanabata->sasahyou, abspath);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_id == HOLE_ID || sasa_id >= tanabata->sasahyou.size) {
|
||||
return 1;
|
||||
}
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == sasa_id) {
|
||||
current_kazari->sasa_id = HOLE_ID;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return sasa_rem(&tanabata->sasahyou, sasa_id);
|
||||
}
|
||||
|
||||
int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) {
|
||||
Sasa *current_sasa = tanabata->sasahyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) {
|
||||
if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) {
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->sasa_id == current_sasa->id) {
|
||||
current_kazari->sasa_id = HOLE_ID;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return sasa_rem(&tanabata->sasahyou, current_sasa->id);
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Sasa tanabata_sasa_get_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_id == HOLE_ID || sasa_id >= tanabata->sasahyou.size) {
|
||||
return HOLE_SASA;
|
||||
}
|
||||
return tanabata->sasahyou.database[sasa_id];
|
||||
}
|
||||
|
||||
Sasa tanabata_sasa_get_by_path(Tanabata *tanabata, const char *path) {
|
||||
char *abspath = NULL;
|
||||
abspath = realpath(path, abspath);
|
||||
if (abspath == NULL) {
|
||||
return HOLE_SASA;
|
||||
}
|
||||
Sasa *current_sasa = tanabata->sasahyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) {
|
||||
if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, abspath) == 0) {
|
||||
return *current_sasa;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
return HOLE_SASA;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
#include <string.h>
|
||||
|
||||
#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 (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
||||
return 1;
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
return tanzaku_add(&tanabata->sappyou, name, description);
|
||||
}
|
||||
|
||||
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_id == HOLE_ID || tanzaku_id >= tanabata->sappyou.size) {
|
||||
return 1;
|
||||
}
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
if (current_kazari->tanzaku_id == tanzaku_id) {
|
||||
current_kazari->tanzaku_id = HOLE_ID;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return tanzaku_rem(&tanabata->sappyou, tanzaku_id);
|
||||
}
|
||||
|
||||
int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) {
|
||||
Tanzaku *current_tanzaku = tanabata->sappyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sappyou.size; i++) {
|
||||
if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t j = 0; j < tanabata->shoppyou.size; j++) {
|
||||
if (current_kazari->tanzaku_id == current_tanzaku->id) {
|
||||
current_kazari->tanzaku_id = HOLE_ID;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
return tanzaku_rem(&tanabata->sappyou, current_tanzaku->id);
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Tanzaku tanabata_tanzaku_get_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_id == HOLE_ID || tanzaku_id >= tanabata->sappyou.size) {
|
||||
return HOLE_TANZAKU;
|
||||
}
|
||||
return tanabata->sappyou.database[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 (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
||||
return tanabata->sappyou.database[i];
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
return HOLE_TANZAKU;
|
||||
}
|
||||
Reference in New Issue
Block a user