/* * Copyright 2014 (c) Anna Schumaker. * Test the filtering code */ #include #include #include #include #include #include enum action_t { ADD, LOWERCASE, SEARCH }; void add_text(const std::string &text) { std::string lc = filter :: add(text, 0); print("%s\n", lc.c_str()); } void to_lowercase(const std::string &text) { std::string lc = filter :: lowercase(text); print("%s\n", lc.c_str()); } void read_file(unsigned int n) { File f("filter.txt"); if (f.open(OPEN_READ)) { for (unsigned int i = 0; i < n; i++) { std::string text = f.getline(); filter :: add(text, i); } f.close(); } } void do_search(const std::string &text) { std::set res; std::set::iterator it; filter :: search(text, res); it = res.begin(); if (it == res.end()) return; print("%u", *it); for (it++; it != res.end(); it++) print(" %u", *it); print("\n"); } int main(int argc, char **argv) { char c; unsigned int n; action_t action = ADD; while ((c = getopt(argc, argv, "als:")) != -1) { switch (c) { case 'a': action = ADD; break; case 'l': action = LOWERCASE; break; case 's': action = SEARCH; n = atoi(optarg); break; } } std::string text; for (int i = optind; i < argc; i++) { text += " "; text += argv[i]; } switch (action) { case ADD: add_text(text); break; case LOWERCASE: to_lowercase(text); break; case SEARCH: read_file(n); do_search(text); break; } return 0; }