tanabata/include/core.h
Masahiko AMANO 6f02cdae10 feat(core): add new remove functions
Now sasa can be removed not only by ID, but also by file path, tanzaku can also be removed by name and alias.
2022-12-21 16:16:46 +03:00

182 lines
5.1 KiB
C++

// Tanabata file manager core lib
// By Masahiko AMANO aka H1K0
#ifndef TANABATA_CORE_H
#define TANABATA_CORE_H
#ifdef __cplusplus
#include <cstdint>
#include <cstdio>
extern "C" {
#else
#include <stdint.h>
#include <stdio.h>
#endif
// ==================== STRUCTS AND TYPEDEFS ==================== //
// Sasa (笹) - a file record
typedef struct sasa {
uint64_t id; // Sasa ID
uint64_t created_ts; // Sasa creation timestamp
char *path; // File path
} Sasa;
// Tanzaku (短冊) - a tag record
typedef struct tanzaku {
uint64_t id; // Tanzaku ID
uint64_t created_ts; // Tanzaku creation timestamp
uint64_t modified_ts; // Tanzaku last modification timestamp
char *name; // Tanzaku name
char *alias; // Tanzaku alias
char *description; // Tanzaku description
} Tanzaku;
// Kazari (飾り) - a sasa-tanzaku association record
typedef struct kazari {
uint64_t created_ts; // Kazari creation timestamp
uint64_t sasa_id; // Sasa ID
uint64_t tanzaku_id; // Tanzaku ID
} Kazari;
// Sasahyou (笹表) - the file database
typedef struct sasahyou {
uint64_t created_ts; // Sasahyou creation timestamp
uint64_t modified_ts; // Sasahyou last modification timestamp
uint64_t size; // Sasahyou size (including unstaged units)
uint64_t removed_cnt; // Number of removed sasa
Sasa *contents; // Array of sasa
FILE *file; // Storage file for sasahyou
} Sasahyou;
// Sappyou (冊表) - the tanzaku database
typedef struct sappyou {
uint64_t created_ts; // Sappyou creation timestamp
uint64_t modified_ts; // Sappyou last modification timestamp
uint64_t size; // Sappyou size
uint64_t removed_cnt; // Number of removed tanzaku
Tanzaku *contents; // Array of tanzaku
FILE *file; // Storage file for sappyou
} Sappyou;
// Shoppyou (飾表) - the kazari database
typedef struct shoppyou {
uint64_t created_ts; // Shoppyou creation timestamp
uint64_t modified_ts; // Shoppyou last modification timestamp
uint64_t size; // Shoppyou size
uint64_t removed_cnt; // Number of removed kazari
Kazari *contents; // Array of kazari
FILE *file; // Storage file for shoppyou
} Shoppyou;
// ==================== FILE SIGNATURES ==================== //
// Sasahyou file signature: 七夕笹表
static const uint16_t SASAHYOU_SIG[4] = {L'', L'', L'', L''};
// Sappyou file signature: 七夕冊表
static const uint16_t SAPPYOU_SIG[4] = {L'', L'', L'', L''};
// Shoppyou file signature: 七夕飾表
static const uint16_t SHOPPYOU_SIG[4] = {L'', L'', L'', L''};
// ==================== SASAHYOU SECTION ==================== //
// Initialize empty sasahyou
int sasahyou_init(Sasahyou *sasahyou);
// Free sasahyou
int sasahyou_free(Sasahyou *sasahyou);
// Weed sasahyou
int sasahyou_weed(Sasahyou *sasahyou);
// Load sasahyou
int sasahyou_load(Sasahyou *sasahyou);
// Save sasahyou
int sasahyou_save(Sasahyou *sasahyou);
// Open sasahyou
int sasahyou_open(Sasahyou *sasahyou, const char *path);
// Dump sasahyou
int sasahyou_dump(Sasahyou *sasahyou, const char *path);
// Add sasa to sasahyou
int sasa_add(Sasahyou *sasahyou, const char *path);
// Remove sasa from sasahyou by ID
int sasa_rem_by_id(Sasahyou *sasahyou, uint64_t sasa_id);
// Remove sasa from sasahyou by file path
int sasa_rem_by_path(Sasahyou *sasahyou, const char *path);
// ==================== SAPPYOU SECTION ==================== //
// Initialize empty sappyou
int sappyou_init(Sappyou *sappyou);
// Free sappyou
int sappyou_free(Sappyou *sappyou);
// Weed sappyou
int sappyou_weed(Sappyou *sappyou);
// Load sappyou
int sappyou_load(Sappyou *sappyou);
// Save sappyou
int sappyou_save(Sappyou *sappyou);
// Open sappyou
int sappyou_open(Sappyou *sappyou, const char *path);
// Dump sappyou
int sappyou_dump(Sappyou *sappyou, const char *path);
// Add new tanzaku to sappyou
int tanzaku_add(Sappyou *sappyou, const char *name, const char *alias, const char *description);
// Remove tanzaku from sappyou by ID
int tanzaku_rem_by_id(Sappyou *sappyou, uint64_t tanzaku_id);
// Remove tanzaku from sappyou by name
int tanzaku_rem_by_name(Sappyou *sappyou, const char *name);
// Remove tanzaku from sappyou by alias
int tanzaku_rem_by_alias(Sappyou *sappyou, const char *alias);
// ==================== SHOPPYOU SECTION ==================== //
// Initialize empty shoppyou
int shoppyou_init(Shoppyou *shoppyou);
// Free shoppyou
int shoppyou_free(Shoppyou *shoppyou);
// Weed shoppyou
int shoppyou_weed(Shoppyou *shoppyou);
// Load shoppyou
int shoppyou_load(Shoppyou *shoppyou);
// Save shoppyou
int shoppyou_save(Shoppyou *shoppyou);
// Open shoppyou
int shoppyou_open(Shoppyou *shoppyou, const char *path);
// Dump shoppyou
int shoppyou_dump(Shoppyou *shoppyou, const char *path);
// Add kazari to shoppyou
int kazari_add(Shoppyou *shoppyou, uint64_t sasa_id, uint64_t tanzaku_id);
// Remove kazari from shoppyou
int kazari_rem(Shoppyou *shoppyou, uint64_t sasa_id, uint64_t tanzaku_id);
#ifdef __cplusplus
}
#endif
#endif //TANABATA_CORE_H