From fca32fa55894216160d82545260bdc1d48309060 Mon Sep 17 00:00:00 2001 From: Masahiko AMANO Date: Fri, 23 Dec 2022 16:53:52 +0300 Subject: [PATCH] feat(lib): add get tanzaku list by sasa and get sasa list by tanzaku functions --- include/tanabata.h | 6 ++++++ src/tanabata/kazari.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/include/tanabata.h b/include/tanabata.h index 314bba8..719a21b 100644 --- a/include/tanabata.h +++ b/include/tanabata.h @@ -87,6 +87,12 @@ int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_i // Remove kazari int tanabata_kazari_rem(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id); +// Get tanzaku list of sasa +Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id); + +// Get sasa list of tanzaku +Sasa *tanabata_sasa_get_by_tanzaku(Tanabata *tanabata, uint64_t tanzaku_id); + #ifdef __cplusplus } #endif diff --git a/src/tanabata/kazari.c b/src/tanabata/kazari.c index 5c689b3..95dc210 100644 --- a/src/tanabata/kazari.c +++ b/src/tanabata/kazari.c @@ -1,3 +1,5 @@ +#include + #include "../../include/tanabata.h" int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id) { @@ -7,3 +9,39 @@ int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_i 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) { + Tanzaku *tanzaku_list = NULL; + uint64_t tanzaku_count = 0; + for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { + if (tanabata->shoppyou.database[i].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); + } + } + 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) { + Sasa *sasa_list = NULL; + uint64_t sasa_count = 0; + for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { + if (tanabata->shoppyou.database[i].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); + } + } + if (sasa_list != NULL) { + sasa_list = realloc(sasa_list, (sasa_count + 1) * sizeof(Sasa)); + sasa_list[sasa_count] = HOLE_SASA; + } + return sasa_list; +}