kscheme.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <assert.h>
  5. #include <faux/str.h>
  6. #include <faux/list.h>
  7. #include <klish/khelper.h>
  8. #include <klish/kptype.h>
  9. #include <klish/kview.h>
  10. #include <klish/kscheme.h>
  11. struct kscheme_s {
  12. faux_list_t *ptypes;
  13. faux_list_t *views;
  14. };
  15. // Simple methods
  16. // PTYPE list
  17. KCMP_NESTED(scheme, ptype, name);
  18. KCMP_NESTED_BY_KEY(scheme, ptype, name);
  19. KADD_NESTED(scheme, ptype);
  20. KFIND_NESTED(scheme, ptype);
  21. // VIEW list
  22. KCMP_NESTED(scheme, view, name);
  23. KCMP_NESTED_BY_KEY(scheme, view, name);
  24. KADD_NESTED(scheme, view);
  25. KFIND_NESTED(scheme, view);
  26. kscheme_t *kscheme_new(kscheme_error_e *error)
  27. {
  28. kscheme_t *scheme = NULL;
  29. scheme = faux_zmalloc(sizeof(*scheme));
  30. assert(scheme);
  31. if (!scheme) {
  32. if (error)
  33. *error = KSCHEME_ERROR_ALLOC;
  34. return NULL;
  35. }
  36. // PTYPE list
  37. scheme->ptypes = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
  38. kscheme_ptype_compare, kscheme_ptype_kcompare,
  39. (void (*)(void *))kptype_free);
  40. assert(scheme->ptypes);
  41. // VIEW list
  42. scheme->views = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
  43. kscheme_view_compare, kscheme_view_kcompare,
  44. (void (*)(void *))kview_free);
  45. assert(scheme->views);
  46. return scheme;
  47. }
  48. void kscheme_free(kscheme_t *scheme)
  49. {
  50. if (!scheme)
  51. return;
  52. faux_list_free(scheme->ptypes);
  53. faux_list_free(scheme->views);
  54. faux_free(scheme);
  55. }
  56. const char *kscheme_strerror(kscheme_error_e error)
  57. {
  58. const char *str = NULL;
  59. switch (error) {
  60. case KSCHEME_ERROR_OK:
  61. str = "Ok";
  62. break;
  63. case KSCHEME_ERROR_INTERNAL:
  64. str = "Internal error";
  65. break;
  66. case KVIEW_ERROR_ALLOC:
  67. str = "Memory allocation error";
  68. break;
  69. default:
  70. str = "Unknown error";
  71. break;
  72. }
  73. return str;
  74. }