/** * Copyright 2013 (c) Anna Schumaker. */ #ifndef OCARINA_CORE_FILTER_H #define OCARINA_CORE_FILTER_H #include #include /** * The filter layer is used to find a subset of songs based on an input * string. Since this layer does text processing, it also provides a * functions for converting strings to lowercase. * * The text processing is mostly interested in alphanumeric characters, so * any special characters included in the input text will be stripped out. * Tabs, spaces and the following characters are used to delimit words: * * \/,;()_-~+" */ namespace filter { /** * Convert the key to lowercase and break into individual words. * Generate substrings for each word and add each (substring, index) * pair to the Index. * * To generate substrings: iterate over the word starting from the * first character, and append a character for every iteration. For * example, the word "goron" would contain the substrings: * { g, go, gor, goro, goron }. * * @param text The text to parse. * @param index The track index to pair with the text. * @return The lowercase form of the input text. */ const std::string add(const std::string &, unsigned int); /** * Break the input text into lowercase words and search the Index * for matches. The results set should be filled out with the * intersection of the IndexEntry for each word. If any word does * not appear in the index, then the result set should be empty. * * @param text The text to search for. * @param res The results set to fill in with matching indexes. */ void search(const std::string &, std::set &); /** * Converts the input text to lowercase and returns the result. * * @param text The text to be converted. * @return The lowercase form of the input text. */ std::string lowercase(const std::string &); }; #endif /* OCARINA_CORE_FILTER_H */