source: libabac/abac_list.c @ 202a7f9

mei_rt2mei_rt2_fix_1meiyap-rt1rt2
Last change on this file since 202a7f9 was 202a7f9, checked in by Mei <mei@…>, 12 years ago

commited modified files for rt1

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[379a53f]1#include <stdlib.h>
2
[6d5623e]3#include "abac_list.h"
[3c251d0]4#include "abac_util.h"
[379a53f]5
[6d5623e]6abac_list_t *abac_list_new(void) {
[3c251d0]7    abac_list_t *ret = abac_xmalloc(sizeof(abac_list_t));
[379a53f]8    ret->elts = NULL;
[90d20f0]9    ret->size = 0;
[379a53f]10    return ret;
11}
12
[6d5623e]13void abac_list_add(abac_list_t *list, void *elt) {
[3c251d0]14    abac_list_element_t *new_element = abac_xmalloc(sizeof(abac_list_element_t));
[379a53f]15
16    new_element->ptr = elt;
17    DL_APPEND(list->elts, new_element);
[90d20f0]18    ++list->size;
[379a53f]19}
[d8990b3]20
[202a7f9]21void abac_list_prepend(abac_list_t *list, void *elt) {
22    abac_list_element_t *new_element = abac_xmalloc(sizeof(abac_list_element_t));
23
24    new_element->ptr = elt;
25    DL_PREPEND(list->elts, new_element);
26    ++list->size;
27}
28
[6d5623e]29int abac_list_remove(abac_list_t *list, void *elt) {
30    abac_list_element_t *cur;
[d526b7a]31
32    // iterate the list, remove the item if we find it
33    DL_FOREACH(list->elts, cur) {
34        if (cur->ptr == elt) {
35            DL_DELETE(list->elts, cur);
[be963dc]36            free(cur);
[90d20f0]37            --list->size;
[d526b7a]38            return 1;
39        }
40    }
41
[202a7f9]42    // return false if we don't
[d526b7a]43    return 0;
44}
45
[6d5623e]46int abac_list_size(abac_list_t *list) {
[53e540d]47    if (list)
48        return list->size;
49    return 0;
[90d20f0]50}
51
[6d5623e]52void abac_list_free(abac_list_t *list) {
53    abac_list_element_t *elt, *tmp;
[d8990b3]54
[53e540d]55    if (list) {
56        // free everthing in the list
57        DL_FOREACH_SAFE(list->elts, elt, tmp) {
58            DL_DELETE(list->elts, elt);
59            free(elt);
60        }
[d8990b3]61
[53e540d]62        // free the list
63        free(list);
64    }
[d8990b3]65}
Note: See TracBrowser for help on using the repository browser.