source: libabac/abac_stack.c @ e97d2e2

mei_rt2_fix_1
Last change on this file since e97d2e2 was 7b548fa, checked in by Mei <mei@…>, 12 years ago

1) add time static constraint
2) add example balltime_rt2_typed
3) change the way that time is being kept

from 20120228T080000 to time(2012,2,28,8,0,0) and
the constraint check is via compare(op,time1,time2)

  • Property mode set to 100644
File size: 1.4 KB
Line 
1#include <stdlib.h>
2
3#include "abac_stack.h"
4#include "abac_util.h"
5
6abac_stack_t *abac_stack_new(void) {
7    abac_stack_t *ret = abac_xmalloc(sizeof(abac_stack_t));
8    ret->elts = NULL;
9    ret->size = 0;
10    return ret;
11}
12
13/* push only if it is not in there still */
14int abac_stack_unique_push(abac_stack_t *stack, void *elt) {
15    if(!stack) return 0; 
16
17    void *cur;
18    abac_stack_foreach(stack, cur,
19        if(cur == elt)
20            return 0;
21        );
22    abac_stack_push(stack,elt);
23    return 1;
24}
25
26void abac_stack_push(abac_stack_t *stack, void *elt) {
27    abac_stack_element_t *new_element = abac_xmalloc(sizeof(abac_stack_element_t));
28
29    new_element->ptr = elt;
30    DL_APPEND(stack->elts, new_element);
31    ++stack->size;
32}
33
34void *abac_stack_pop(abac_stack_t *stack) {
35    abac_stack_element_t *cur;
36    void *ret;
37   
38    if(!stack) return NULL;
39
40    if(stack->size>0) {
41        cur=stack->elts;
42        ret=cur->ptr;
43        DL_DELETE(stack->elts, cur);
44        free(cur);
45        --stack->size;
46        return ret;
47    }
48    // reutrn false if we don't
49    return NULL;
50}
51
52int abac_stack_size(abac_stack_t *stack) {
53    if(stack) return stack->size;
54    return 0;
55}
56
57void abac_stack_free(abac_stack_t *stack) {
58    abac_stack_element_t *elt, *tmp;
59
60    if(!stack) return; 
61
62    // free everthing in the stack
63    DL_FOREACH_SAFE(stack->elts, elt, tmp) {
64        DL_DELETE(stack->elts, elt);
65        free(elt);
66    }
67
68    // free the list
69    free(stack);
70}
Note: See TracBrowser for help on using the repository browser.