aos_fstack.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "aos_fstack.h"
  2. aos_array_header_t *aos_fstack_create(aos_pool_t *p, int size)
  3. {
  4. return apr_array_make(p, size, sizeof(aos_fstack_item_t));
  5. }
  6. void aos_fstack_push(aos_array_header_t *fstack, void *data, aos_func_u func, int order)
  7. {
  8. aos_fstack_item_t *item;
  9. item = (aos_fstack_item_t*)apr_array_push(fstack);
  10. item->data = data;
  11. item->func = func;
  12. item->order = order;
  13. }
  14. aos_fstack_item_t *aos_fstack_pop(aos_array_header_t *fstack)
  15. {
  16. aos_fstack_item_t *item;
  17. item = (aos_fstack_item_t*)apr_array_pop(fstack);
  18. if (item == NULL) {
  19. return NULL;
  20. }
  21. switch (item->order) {
  22. case 1:
  23. item->func.func1(item->data);
  24. break;
  25. case 2:
  26. item->func.func2();
  27. break;
  28. case 3:
  29. item->func.func3(item->data);
  30. break;
  31. case 4:
  32. item->func.func4();
  33. break;
  34. default:
  35. break;
  36. }
  37. return item;
  38. }
  39. void aos_fstack_destory(aos_array_header_t *fstack)
  40. {
  41. while (aos_fstack_pop(fstack) != NULL);
  42. }