/* cklist.h - Custom list data structure for ck ------------------------*- C -*- * * This file is part of ck, the config keeper * * ----------------------------------------------------------------------------- * * Copyright (C) 2018 Anastasis Grammenos * GPLv3 (see LICENCE for the full notice) * * ----------------------------------------------------------------------------- * * Ck needs a list of strings. Assists with finding the correct config file * to edit when using ck edit and provides a backend to the ck list action. * * -------------------------------------------------------------------------- */ #ifndef CKLIST_H #define CKLIST_H typedef struct cklist_st cklist; struct cklist_st { int size; int pos; char **arr; }; extern cklist* list_make_new(); extern void list_add(cklist *ckl, const char *str); extern cklist* list_make_and_add(const char *str); extern void list_rewind(cklist *ckl); extern int list_next(cklist *ckl); extern char* list_get(cklist *ckl); extern char* list_get_at(cklist *ckl, int pos); extern int list_size(cklist *ckl); /* rewinds */ extern cklist* list_duplicate(cklist *ckl); /* rewinds */ extern cklist* list_move(cklist *ckl); /* rewinds * copy from index (>=) to the end */ extern cklist* list_copy_from(cklist *ckl, int index); /* rewinds * copy from the start until (<) index*/ extern cklist* list_copy_until(cklist *ckl, int index); /* rewinds * copy from (>=) until (<) */ extern cklist* list_copy_part(cklist *ckl, int from, int until); /* return 1 if str exists in the list, 0 otherwise */ extern int list_exists(cklist *ckl, char *str); /* rewinds */ extern void list_print_lisp(cklist *ckl); extern void list_print_python(cklist *ckl); extern void list_print(cklist *ckl); extern void list_print_concat(cklist *ckl); /* Deallocate resources */ extern void list_free(cklist *ckl); #endif /* CKLIST_H */