kpath.h 954 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /** @file kpath.h
  2. *
  3. * @brief Klish path stack
  4. */
  5. #ifndef _klish_kpath_h
  6. #define _klish_kpath_h
  7. #include <faux/list.h>
  8. #include <klish/kentry.h>
  9. typedef struct kpath_s kpath_t;
  10. typedef struct klevel_s klevel_t;
  11. typedef faux_list_node_t kpath_levels_node_t;
  12. C_DECL_BEGIN
  13. // Level
  14. klevel_t *klevel_new(const kentry_t *entry);
  15. void klevel_free(klevel_t *level);
  16. const kentry_t *klevel_entry(const klevel_t *level);
  17. // Path
  18. kpath_t *kpath_new(void);
  19. void kpath_free(kpath_t *path);
  20. size_t kpath_len(const kpath_t *path);
  21. size_t kpath_is_empty(const kpath_t *path);
  22. bool_t kpath_push(kpath_t *path, klevel_t *level);
  23. bool_t kpath_pop(kpath_t *path);
  24. klevel_t *kpath_current(const kpath_t *path);
  25. kpath_levels_node_t *kpath_iterr(const kpath_t *path);
  26. klevel_t *kpath_eachr(kpath_levels_node_t **iterr);
  27. kpath_levels_node_t *kpath_iter(const kpath_t *path);
  28. klevel_t *kpath_each(kpath_levels_node_t **iter);
  29. C_DECL_END
  30. #endif // _klish_kpath_h