iterator.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include <mem_manager.h>
  2. #include <iterator/iterator.h>
  3. #include <errno.h>
  4. #include <os_common_api.h>
  5. struct iterator *iterator_create(struct iterator_ops *ops, const void *param)
  6. { struct iterator *iter = mem_malloc(sizeof(struct iterator));
  7. if (!iter) {
  8. SYS_LOG_ERR("iter mem malloc fail \n");
  9. goto out_exit;
  10. }
  11. iter->ops = ops;
  12. if (iter->ops->init) {
  13. int res = iter->ops->init(iter, param);
  14. if (res) {
  15. SYS_LOG_ERR("iterator initialize failed (res=%d)\n", res);
  16. mem_free(iter);
  17. return NULL;
  18. }
  19. }
  20. out_exit:
  21. SYS_LOG_INF("iterator create %s\n",iter ? "successfully" : "failed");
  22. return iter;
  23. }
  24. int iterator_destroy(struct iterator *iter)
  25. {
  26. int res = 0;
  27. if (!iter)
  28. return -EINVAL;
  29. if (iter->ops->destroy)
  30. res = iter->ops->destroy(iter);
  31. mem_free(iter);
  32. return res;
  33. }
  34. int iterator_has_next(struct iterator *iter)
  35. {
  36. int res = 0;
  37. if (iter && iter->ops->has_next)
  38. res = iter->ops->has_next(iter);
  39. return res;
  40. }
  41. const void *iterator_next(struct iterator *iter, bool force_switch, uint16_t *track_no)
  42. {
  43. const void *res = NULL;
  44. if (iter)
  45. res = iter->ops->next(iter, force_switch, track_no);
  46. return res;
  47. }
  48. int iterator_has_prev(struct iterator *iter)
  49. {
  50. int res = 0;
  51. if (iter && iter->ops->has_prev)
  52. res = iter->ops->has_prev(iter);
  53. return res;
  54. }
  55. const void *iterator_prev(struct iterator *iter, uint16_t *track_no)
  56. {
  57. const void *res = NULL;
  58. if (iter && iter->ops->prev)
  59. res = iter->ops->prev(iter, track_no);
  60. return res;
  61. }
  62. int iterator_set_cursor(struct iterator *iter, const void *cursor)
  63. {
  64. if (iter && iter->ops->set_cursor)
  65. return iter->ops->set_cursor(iter, cursor);
  66. return -ENOSYS;
  67. }
  68. int iterator_set_mode(struct iterator *iter, uint8_t mode)
  69. {
  70. if (iter && iter->ops->set_mode)
  71. return iter->ops->set_mode(iter, mode);
  72. return -ENOSYS;
  73. }
  74. const void *iterator_next_folder(struct iterator *iter, uint16_t *track_no)
  75. {
  76. const void *res = NULL;
  77. if (iter)
  78. res = iter->ops->next_folder(iter, track_no);
  79. return res;
  80. }
  81. const void *iterator_prev_folder(struct iterator *iter, uint16_t *track_no)
  82. {
  83. const void *res = NULL;
  84. if (iter)
  85. res = iter->ops->prev_folder(iter, track_no);
  86. return res;
  87. }
  88. const void *iterator_set_track_no(struct iterator *iter, uint16_t track_no)
  89. {
  90. const void *res = NULL;
  91. if (iter)
  92. res = iter->ops->set_track_no(iter, track_no);
  93. return res;
  94. }
  95. int iterator_get_plist_info(struct iterator *iter, void *param)
  96. {
  97. if (iter && iter->ops->get_plist_info)
  98. return iter->ops->get_plist_info(iter, param);
  99. return -ENOSYS;
  100. }