doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / bitvecset.c
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include "bitvecset.h"
10
11 BV_Set * makeSet(int *list, int size, int max);
12
13 BV_Set * makeEmptySet(int max)
14 {
15  int x;
16
17  return ( makeSet(&x, 0, max));
18   
19 }
20
21
22 BV_Set * makeSet(int *list, int size, int max)
23 {
24   BV_Set * s;
25   int i;
26
27   s = (BV_Set *) malloc(sizeof(BV_Set));
28   s->max = max;
29   s->size = size;
30   s->vector = (short *) malloc(sizeof(short)*(1+max));
31
32   for (i = 0; i<= max; i++)
33       s->vector[i] = 0;
34   for (i = 0; i< size; i++)
35     if (list[i] <= max && list[i] >= 0)
36       s->vector[ list[i]] = 1;
37     else 
38       printf("***ERROR: makeSet received %d, when max was supposed to be %d",
39              list[i], max);
40
41   return s;
42 }
43
44 void destroySet(BV_Set* set)
45 {
46   free(set->vector);
47   set->vector=0;
48   free(set);
49 }
50
51
52 void bvset_insert(BV_Set * s, int value)
53 {
54   if (value > s->max || value < 0) 
55     printf("BV_Set error. inserting value %d in a set where max is %d\n",
56            value, s->max);
57   else {
58     if (s->vector[value]) return;
59     else { 
60       s->vector[value] = 1;
61       s->size++;
62     }
63   }
64 }
65
66
67 int bvset_find(BV_Set * s, int value)
68 {
69   if (value > s->max || value < 0) {
70     printf("BV_Set error.  *find* on a value %d in a set where max is %d\n",
71            value, s->max);
72     return -1;
73   }
74   else return (s->vector[value]);
75 }
76
77 int bvset_size(BV_Set * s) 
78 {
79   return s->size;
80 }
81
82 void bvset_enumerate(BV_Set * s, int **list, int *size)
83 {
84   int i, j;
85
86   /*
87   printf("set is: ");
88   for (i=0; i<=s->max; i++)
89     printf("%d ", s->vector[i]);
90   printf("\n returning list: "); */
91
92   *list = (int *) malloc(sizeof(int)*s->size);
93   *size = s->size;
94
95   j = 0;
96   for (i=0; i<=s->max; i++)
97     if (s->vector[i]) (*list)[j++] = i;
98
99   if (j > s->size) {
100     printf("Error, too many bits written %d %d\n",j,s->size);
101     printf("set is: ");
102     for (i=0; i<=s->max; i++)
103       printf("%d ", s->vector[i]);
104     printf("\n returning list: ");
105     for (i=0; i< *size; i++)
106       printf("%d ", (*list)[i]);
107   }
108 }
109
110 /*@}*/