This source file includes following definitions.
- intCIV_isInitialized
- intCIV_init
- intCIV_exit
- intCIV_set
- intCIV_get
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include "IntConstantInitializedVector.h"
4
5 int intCIV_isInitialized(int_CIVector * v, int i)
6 {
7 if(v->top == 0)
8 return 0;
9 if(v->from[i] >= 0)
10 if(v->from[i] < v->top && v->to[v->from[i]] == i)
11 return 1;
12 return 0;
13 }
14
15
16
17 void intCIV_init(int_CIVector * v, int size, int init_value)
18 {
19 v->init_value = init_value;
20 v->size = size;
21 v->top = 0;
22 v->to = malloc(sizeof(int)*size);
23 v->from = malloc(sizeof(int)*size);
24 v->vec = malloc(sizeof(int)*size);
25 }
26
27 void intCIV_exit(int_CIVector * v)
28 {
29 free(v->to);
30 free(v->from);
31 free(v->vec);
32 }
33
34 int intCIV_set(int_CIVector * v, int i, int val)
35 {
36 if(v == NULL)
37 return -1;
38 if(i < 0 || i >= v->size)
39 return -1;
40 if(!intCIV_isInitialized(v,i))
41 {
42 v->from[i] = v->top;
43 v->to[v->top] = i;
44 v->top++;
45 }
46 v->vec[i] = val;
47 return 0;
48 }
49
50 int intCIV_get(int_CIVector * v, int i)
51 {
52 if(v == NULL)
53 return -1;
54 if(i < 0 || i >= v->size)
55 return -1;
56 if(intCIV_isInitialized(v,i))
57 return v->vec[i];
58 return v->init_value;
59 }
60