1 /******************************************************************************
2  *
3  * File:           istack.c
4  *
5  * Created:        06/06/2001
6  *
7  * Author:         Pavel Sakov
8  *                 CSIRO Marine Research
9  *
10  * Purpose:        Handling stack of integers
11  *
12  * Description:    None
13  *
14  * Revisions:      None
15  *
16  *****************************************************************************/
17 
18 #define STACK_NSTART 50
19 #define STACK_NINC 50
20 
21 #include <stdlib.h>
22 #include <string.h>
23 #include "istack.h"
24 
istack_create(void)25 istack* istack_create(void)
26 {
27     istack* s = malloc(sizeof(istack));
28 
29     s->n = 0;
30     s->nallocated = STACK_NSTART;
31     s->v = malloc(STACK_NSTART * sizeof(int));
32     return s;
33 }
34 
istack_destroy(istack * s)35 void istack_destroy(istack* s)
36 {
37     if (s != NULL) {
38         free(s->v);
39         free(s);
40     }
41 }
42 
istack_reset(istack * s)43 void istack_reset(istack* s)
44 {
45     s->n = 0;
46 }
47 
istack_contains(istack * s,int v)48 int istack_contains(istack* s, int v)
49 {
50     int i;
51 
52     for (i = 0; i < s->n; ++i)
53         if (s->v[i] == v)
54             return 1;
55     return 0;
56 }
57 
istack_push(istack * s,int v)58 void istack_push(istack* s, int v)
59 {
60     if (s->n == s->nallocated) {
61         s->nallocated *= 2;
62         s->v = realloc(s->v, s->nallocated * sizeof(int));
63     }
64 
65     s->v[s->n] = v;
66     s->n++;
67 }
68 
istack_pop(istack * s)69 int istack_pop(istack* s)
70 {
71     s->n--;
72     return s->v[s->n];
73 }
74 
istack_getnentries(istack * s)75 int istack_getnentries(istack* s)
76 {
77     return s->n;
78 }
79 
istack_getentries(istack * s)80 int* istack_getentries(istack* s)
81 {
82     return s->v;
83 }
84