51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
|
|
#include "aos_fstack.h"
|
||
|
|
|
||
|
|
aos_array_header_t *aos_fstack_create(aos_pool_t *p, int size)
|
||
|
|
{
|
||
|
|
return apr_array_make(p, size, sizeof(aos_fstack_item_t));
|
||
|
|
}
|
||
|
|
|
||
|
|
void aos_fstack_push(aos_array_header_t *fstack, void *data, aos_func_u func, int order)
|
||
|
|
{
|
||
|
|
aos_fstack_item_t *item;
|
||
|
|
|
||
|
|
item = (aos_fstack_item_t*)apr_array_push(fstack);
|
||
|
|
item->data = data;
|
||
|
|
item->func = func;
|
||
|
|
item->order = order;
|
||
|
|
}
|
||
|
|
|
||
|
|
aos_fstack_item_t *aos_fstack_pop(aos_array_header_t *fstack)
|
||
|
|
{
|
||
|
|
aos_fstack_item_t *item;
|
||
|
|
|
||
|
|
item = (aos_fstack_item_t*)apr_array_pop(fstack);
|
||
|
|
if (item == NULL) {
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
switch (item->order) {
|
||
|
|
case 1:
|
||
|
|
item->func.func1(item->data);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
item->func.func2();
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
item->func.func3(item->data);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
item->func.func4();
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
return item;
|
||
|
|
}
|
||
|
|
|
||
|
|
void aos_fstack_destory(aos_array_header_t *fstack)
|
||
|
|
{
|
||
|
|
while (aos_fstack_pop(fstack) != NULL);
|
||
|
|
}
|