diff options
| author | Ben Winston | 2024-06-18 12:01:42 -0400 |
|---|---|---|
| committer | Ben Winston | 2024-06-18 12:01:42 -0400 |
| commit | dfa758e1dd36149a03a285e4731741da64eb1236 (patch) | |
| tree | 24a26b6a397886ea2f053f7eca5a0cd34cae95fd | |
| parent | 10bbb7c6f91dc0cb434bb84409029316341d9826 (diff) | |
refactor: search with a loop through fields instead of ifs
| -rw-r--r-- | booki.c | 45 |
1 files changed, 20 insertions, 25 deletions
@@ -923,32 +923,27 @@ void search(int argc, char* argv[], char* booki_file) { for (i = 0; i < search_opts.count; i++) { field = search_opts.opts[i]; - // compare fields - if (ATTR_MATCH(field, "title")) { - if (!match_string(search_opts.args[i], book.title)) - break; - } else if (ATTR_MATCH(field, "author")) { - if (!match_string(search_opts.args[i], book.author)) - break; - } else if (ATTR_MATCH(field, "language")) { - if (!match_string(search_opts.args[i], book.language)) - break; - } else if (ATTR_MATCH(field, "translator")) { - if (!match_string(search_opts.args[i], book.translator)) - break; - } else if (ATTR_MATCH(field, "on")) { - if (!match_string(search_opts.args[i], book.on)) - break; - } else if (ATTR_MATCH(field, "pages")) { - if (!match_int(search_opts.args[i], book.pages)) - break; - } else if (ATTR_MATCH(field, "published")) { - if (!match_int(search_opts.args[i], book.published)) - break; - } else { - printf("unsupported field: %s\n", field); - break; + // loop through all datafields + DataField datafield; + int j; + for (j = 0; j < BOOK_FIELDS_COUNT; j++) { + datafield = BOOK_FIELDS[j]; + if (!ATTR_MATCH(field, datafield.name)) + continue; + + if (datafield.type == booki_string) { + if (!match_string(search_opts.args[i], *(get_string_field(&book, datafield.name)))) + break; + } else if (datafield.type == booki_number) { + if (!match_int(search_opts.args[i], *(get_number_field(&book, datafield.name)))) + break; + } } + + // if we found something, break out of the search loop + if (j != BOOK_FIELDS_COUNT) + break; + } match = i == search_opts.count; |
