#include "vector.h" #include Vector *new(int nBits) { Vector *pVector = (Vector *) malloc(sizeof (Vector)); pVector->nBits = nBits; pVector->nInts = (nBits + sizeof(int) - 1) / sizeof(int); pVector->pInts = (int *) calloc(pVector->nInts, sizeof(int)); return pVector; } void DESTROY(Vector *pVector) { free(pVector->pInts); free(pVector); } void dump(Vector *pVector) { int i; for (i=0; inInts; i++) fprintf(stderr, "%2d %08x\n", i, pVector->pInts[i]); } int top(Vector *pVector) { return pVector->nBits - 1; } void insert(Vector *pVector, int n) { int q, r; q = n / sizeof (int); r = n % sizeof (int); pVector->pInts[q] |= 1<pInts[q] &= ~(1<pInts[q] & (1<nInts; nB = pB->nInts; if (nA < nB) return Union(pB, pA); pC = new(pA->nBits); for (i=0; ipInts[i] = pA->pInts[i] | pB->pInts[i]; for ( ; ipInts[i] = pA->pInts[i]; return pC; } Vector *intersect(Vector *pA, Vector *pB) { Vector *pC; int i, nA, nB; nA = pA->nInts; nB = pB->nInts; if (nA > nB) return intersect(pB, pA); pC = new(pA->nBits); for (i=0; ipInts[i] = pA->pInts[i] & pB->pInts[i]; return pC; }