You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
#ifndef LIBWALLY_WORDLIST_H
|
|
#define LIBWALLY_WORDLIST_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
/**
|
|
* struct words- structure representing a parsed list of words
|
|
*/
|
|
struct words {
|
|
/* Number of words in the list */
|
|
size_t len;
|
|
/* Number of bits representable by this word list */
|
|
size_t bits;
|
|
/* Is the word list sorted by unicode code point order? */
|
|
bool sorted;
|
|
/* The underlying string (tokenised, containing embedded NULs) */
|
|
const char *str;
|
|
/* The length of str, or 0 if str points to constant storage */
|
|
size_t str_len;
|
|
/* Pointers to the individual words */
|
|
const char **indices;
|
|
};
|
|
|
|
/**
|
|
* Initialize a words structure.
|
|
*
|
|
* @text: List of words to initialize from, split by whitespace and
|
|
* NUL terminated. Must be UTF-8 encoded.
|
|
*
|
|
* The returned structure contains a copy of @text.
|
|
*/
|
|
struct words *wordlist_init(const char *text);
|
|
|
|
/**
|
|
* Find a word in a wordlist.
|
|
*
|
|
* @w: Parsed list of words to look up in.
|
|
* @word: The word to look up.
|
|
*
|
|
* Returns 0 if not found, idx + 1 otherwise.
|
|
* @see wordlist_init.
|
|
*/
|
|
size_t wordlist_lookup_word(
|
|
const struct words *w,
|
|
const char *word);
|
|
|
|
/**
|
|
* Return the Nth word in a wordlist.
|
|
*
|
|
* @w: Parsed list of words to look up in.
|
|
* @idx: The index to look up.
|
|
*
|
|
* Returns NULL if not found, the word otherwise.
|
|
*/
|
|
const char *wordlist_lookup_index(
|
|
const struct words *w,
|
|
size_t idx);
|
|
|
|
/**
|
|
* wordlist_free - Free a words structure.
|
|
* @w: structure to free.
|
|
*/
|
|
void wordlist_free(struct words *w);
|
|
|
|
#endif /* LIBWALLY_WORDLIST_H */
|
|
|