source: list.c @ 7d4fbcd

barnowl_perlaimdebianowlrelease-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 7d4fbcd was 7d4fbcd, checked in by James M. Kretchmar <kretch@mit.edu>, 22 years ago
Initial check in
  • Property mode set to 100644
File size: 1.6 KB
Line 
1#include "owl.h"
2#include <stdlib.h>
3
4#define INITSIZE 30
5#define GROWAT 2
6#define GROWBY 1.5
7
8int owl_list_create(owl_list *l) {
9  l->size=0;
10  l->list=(void **)owl_malloc(INITSIZE*sizeof(void *));
11  l->avail=INITSIZE;
12  if (l->list==NULL) return(-1);
13  return(0);
14}
15
16int owl_list_get_size(owl_list *l) {
17  return(l->size);
18}
19
20void *owl_list_get_element(owl_list *l, int n) {
21  if (n>l->size-1) return(NULL);
22  return(l->list[n]);
23}
24
25int owl_list_append_element(owl_list *l, void *element) {
26  if ((l->size+1) > (l->avail/GROWAT)) {
27    l->list=owl_realloc(l->list, l->avail*GROWBY*sizeof(void *));
28    l->avail=l->avail*GROWBY;
29    if (l->list==NULL) return(-1);
30  }
31
32  l->list[l->size]=element;
33  l->size++;
34  return(0);
35}
36
37int owl_list_prepend_element(owl_list *l, void *element) {
38  int i;
39 
40  if ((l->size+1) > (l->avail/GROWAT)) {
41    l->list=owl_realloc(l->list, l->avail*GROWBY*sizeof(void *));
42    l->avail=l->avail*GROWBY;
43    if (l->list==NULL) return(-1);
44  }
45
46  for (i=l->size; i>0; i--) {
47    l->list[i]=l->list[i-1];
48  }
49  l->list[0]=element;
50  l->size++;
51  return(0);
52}
53
54int owl_list_remove_element(owl_list *l, int n) {
55  int i;
56
57  if (n>l->size-1) return(-1);
58  for (i=n; i<l->size-1; i++) {
59    l->list[i]=l->list[i+1];
60  }
61  l->size--;
62  return(0);
63}
64
65/* todo: might leak memory */
66int owl_list_replace_element(owl_list *l, int n, void *element) {
67  if (n>l->size-1) return(-1);
68
69  l->list[n]=element;
70  return(0);
71}
72
73void owl_list_free_all(owl_list *l, void (*elefree)(void *)) {
74  int i;
75
76  for (i=0; i<l->size; i++) {
77    (elefree)(l->list[i]);
78  }
79  owl_free(l->list);
80}
81
82void owl_list_free_simple(owl_list *l) {
83  if (l->list) owl_free(l->list);
84}
Note: See TracBrowser for help on using the repository browser.