kentry.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /** @file kentry.h
  2. *
  3. * @brief Klish scheme's "ENTRY" entry
  4. */
  5. #ifndef _klish_kentry_h
  6. #define _klish_kentry_h
  7. #include <faux/list.h>
  8. #include <klish/kaction.h>
  9. typedef struct kentry_s kentry_t;
  10. typedef faux_list_node_t kentry_entrys_node_t;
  11. typedef faux_list_node_t kentry_actions_node_t;
  12. // Mode of nested entrys list
  13. typedef enum {
  14. KENTRY_MODE_NONE, // Illegal
  15. KENTRY_MODE_SEQUENCE, // Sequence of entrys
  16. KENTRY_MODE_SWITCH, // Switch of entrys
  17. KENTRY_MODE_EMPTY, // Entry must not have a nested entrys
  18. } kentry_mode_e;
  19. // Number of max occurs
  20. typedef enum {
  21. KENTRY_OCCURS_UNBOUNDED = (size_t)(-1),
  22. } kentry_occurs_e;
  23. C_DECL_BEGIN
  24. kentry_t *kentry_new(const char *name);
  25. void kentry_free(kentry_t *entry);
  26. bool_t kentry_link(kentry_t *dst, const kentry_t *src);
  27. // Name
  28. const char *kentry_name(const kentry_t *entry);
  29. // Help
  30. const char *kentry_help(const kentry_t *entry);
  31. bool_t kentry_set_help(kentry_t *entry, const char *help);
  32. // Parent
  33. kentry_t *kentry_parent(const kentry_t *entry);
  34. bool_t kentry_set_parent(kentry_t *entry, kentry_t *parent);
  35. // Container
  36. bool_t kentry_container(const kentry_t *entry);
  37. bool_t kentry_set_container(kentry_t *entry, bool_t container);
  38. // Mode
  39. kentry_mode_e kentry_mode(const kentry_t *entry);
  40. bool_t kentry_set_mode(kentry_t *entry, kentry_mode_e mode);
  41. // Min occurs
  42. size_t kentry_min(const kentry_t *entry);
  43. bool_t kentry_set_min(kentry_t *entry, size_t min);
  44. // Max occurs
  45. size_t kentry_max(const kentry_t *entry);
  46. bool_t kentry_set_max(kentry_t *entry, size_t max);
  47. // Ptype
  48. const char *kentry_ptype_str(const kentry_t *entry);
  49. bool_t kentry_set_ptype_str(kentry_t *entry, const char *ptype_str);
  50. kentry_t *kentry_ptype(const kentry_t *entry);
  51. bool_t kentry_set_ptype(kentry_t *entry, kentry_t *ptype);
  52. // Ref
  53. const char *kentry_ref_str(const kentry_t *entry);
  54. bool_t kentry_set_ref_str(kentry_t *entry, const char *ref_str);
  55. kentry_t *kentry_ref(const kentry_t *entry);
  56. bool_t kentry_set_ref(kentry_t *entry, kentry_t *ptype);
  57. // Value
  58. const char *kentry_value(const kentry_t *entry);
  59. bool_t kentry_set_value(kentry_t *entry, const char *value);
  60. // Restore
  61. bool_t kentry_restore(const kentry_t *entry);
  62. bool_t kentry_set_restore(kentry_t *entry, bool_t restore);
  63. // Nested ENTRY list
  64. faux_list_t *kentry_entrys(const kentry_t *entry);
  65. bool_t kentry_add_entry(kentry_t *entry, kentry_t *nested_entry);
  66. kentry_t *kentry_find_entry(const kentry_t *entry, const char *name);
  67. ssize_t kentry_entrys_len(const kentry_t *entry);
  68. kentry_entrys_node_t *kentry_entrys_iter(const kentry_t *entry);
  69. kentry_t *kentry_entrys_each(kentry_entrys_node_t **iter);
  70. // ACTIONs
  71. faux_list_t *kentry_actions(const kentry_t *entry);
  72. bool_t kentry_add_action(kentry_t *entry, kaction_t *action);
  73. ssize_t kentry_actions_len(const kentry_t *entry);
  74. kentry_actions_node_t *kentry_actions_iter(const kentry_t *entry);
  75. kaction_t *kentry_actions_each(kentry_actions_node_t **iter);
  76. C_DECL_END
  77. #endif // _klish_kentry_h