From: Soikk <76824648+Soikk@users.noreply.github.com> Date: Sun, 24 Jul 2022 20:26:35 +0000 (+0200) Subject: Updated example X-Git-Url: https://git.xolatile.top/?a=commitdiff_plain;h=af8d064328b718a90d66e1d729780563f17539f7;p=soikk-DB.git Updated example --- diff --git a/include/database.h b/include/database.h index 339b48b..bcade34 100644 --- a/include/database.h +++ b/include/database.h @@ -27,10 +27,10 @@ int addFileTag(database *db, char *file, char *tag); int addFileTags(database *db, char *file, int ntags, ...); -int searchTag(database *db, char *tag, uint64_t n, uint64_t **r, uint64_t *rl); - int searchFile(database *db, char *file, uint64_t n, uint64_t **r, uint64_t *rl); +int searchTag(database *db, char *tag, uint64_t n, uint64_t **r, uint64_t *rl); + void printDatabase(database *db); void debugDatabase(database *db); diff --git a/src/database.c b/src/database.c index f034464..ea3a6e0 100644 --- a/src/database.c +++ b/src/database.c @@ -130,21 +130,21 @@ int addFileTags(database *db, char *file, int ntags, ...){ return 0; } -// Stores in r a list with the indexes of the first n files that have this tag +// Stores in r a list with the indexes of the first n tags that this file has // If n is 0 or lower, it returns all of them. Stores in rl the length of r -int searchTag(database *db, char *tag, uint64_t n, uint64_t **r, uint64_t *rl){ +int searchFile(database *db, char *file, uint64_t n, uint64_t **r, uint64_t *rl){ uint32_t l; - tag = normalizeStrLimit(tag, &l, MAXPATH-1); - uint64_t h = crc64(0, tag, l); - uint64_t ti = htableSearch(db->htags, h); - if(ti == -1){ + file = normalizeStrLimit(file, &l, MAXPATH-1); + uint64_t h = crc64(0, file, l); + uint64_t fi = htableSearch(db->hfiles, h); + if(fi == -1){ return -1; } *rl = 0; for(uint64_t i = 0; i < db->map->size; ++i){ if(n < 1 || *rl < n){ - if(db->map->table[i].tag == ti){ + if(db->map->table[i].file == fi){ ++(*rl); } } @@ -152,29 +152,29 @@ int searchTag(database *db, char *tag, uint64_t n, uint64_t **r, uint64_t *rl){ *r = malloc((*rl)*sizeof(uint64_t)); uint64_t c = 0; for(uint64_t i = 0; i < db->map->size && c < *rl; ++i){ - if(db->map->table[i].tag == ti){ - (*r)[c++] = db->map->table[i].file; + if(db->map->table[i].file == fi){ + (*r)[c++] = db->map->table[i].tag; } } return 0; } -// Stores in r a list with the indexes of the first n tags that this file has +// Stores in r a list with the indexes of the first n files that have this tag // If n is 0 or lower, it returns all of them. Stores in rl the length of r -int searchFile(database *db, char *file, uint64_t n, uint64_t **r, uint64_t *rl){ +int searchTag(database *db, char *tag, uint64_t n, uint64_t **r, uint64_t *rl){ uint32_t l; - file = normalizeStrLimit(file, &l, MAXPATH-1); - uint64_t h = crc64(0, file, l); - uint64_t fi = htableSearch(db->hfiles, h); - if(fi == -1){ + tag = normalizeStrLimit(tag, &l, MAXPATH-1); + uint64_t h = crc64(0, tag, l); + uint64_t ti = htableSearch(db->htags, h); + if(ti == -1){ return -1; } *rl = 0; for(uint64_t i = 0; i < db->map->size; ++i){ if(n < 1 || *rl < n){ - if(db->map->table[i].file == fi){ + if(db->map->table[i].tag == ti){ ++(*rl); } } @@ -182,8 +182,8 @@ int searchFile(database *db, char *file, uint64_t n, uint64_t **r, uint64_t *rl) *r = malloc((*rl)*sizeof(uint64_t)); uint64_t c = 0; for(uint64_t i = 0; i < db->map->size && c < *rl; ++i){ - if(db->map->table[i].file == fi){ - (*r)[c++] = db->map->table[i].tag; + if(db->map->table[i].tag == ti){ + (*r)[c++] = db->map->table[i].file; } } diff --git a/src/main.c b/src/main.c index bd5c6b9..0768188 100644 --- a/src/main.c +++ b/src/main.c @@ -9,9 +9,9 @@ int main(){ addFileTag(db, "vaca.png", "naturaleza"); - addFileTags(db, "donald-tromp.jpg", 3, "based", "hitler", "very cool"); + addFileTags(db, "donald-tromp.jpg", 3, "based", "blonde", "very cool"); addFileTag(db, "vaca.png", "lovely"); - addFileTags(db, "vaca.png", 3, "nature", "kami", "very cool"); + addFileTags(db, "vaca.png", 3, "nature", "animal", "very cool"); storeDatabase(db, "db.db");