static CcsBool_t CSOS_InitSet(CcCSharpBaseOutputScheme_t * self, CcOutput_t * output) { char * setstr; int setlen, index; const CcBitArray_t * cur; setlen = self->base.globals->symtab.terminals.Count; setstr = CcMalloc(setlen + 1); setstr[setlen] = 0; if (setlen > 4) { for (index = 0; index < setlen; ++index) if (index == 0) setstr[index] = '*'; else setstr[index] = index % 5 == 0 ? '0' + index % 10 : ' '; CcPrintfIL(output, "/%s */", setstr); } for (cur = self->symSet.start; cur < self->symSet.used; ++cur) { CcsAssert(setlen == CcBitArray_getCount(cur)); for (index = 0; index < setlen; ++index) setstr[index] = CcBitArray_Get(cur, index) ? '*' : '.'; CcPrintfIL(output, "\"%s.\"%c /* %d */", setstr, cur < self->symSet.used - 1 ? ',' : ' ', cur - self->symSet.start); } CcFree(setstr); return TRUE; }
static void CcBitArray_RandomSet(CcBitArray_t * self) { long int rnd; int idx, bit, numbits = CcBitArray_getCount(self); for (idx = 0; idx < numbits; idx += 16) { rnd = rand(); for (bit = 0; bit < 16 && idx + bit < self->numbits; ++bit) if ((rnd & (1 << bit))) CcBitArray_Set(self, idx + bit, 1); else CcBitArray_Set(self, idx + bit, 0); } }
static void ATest(FILE * fp, CcBitArray_t * ba0, CcBitArray_t * ba1) { CcBitArray_t ba2; int idx, cnt, numbits = CcBitArray_getCount(ba0); CcBitArray_Dump(ba0, fp, "BitArray 0: ", "\n"); CcBitArray_Dump(ba1, fp, "BitArray 1: ", "\n"); cnt = 0; for (idx = 0; idx < numbits; ++idx) if (CcBitArray_Get(ba0, idx) && CcBitArray_Get(ba1, idx)) cnt = 1; COCO_ASSERT((CcBitArray_Intersect(ba0, ba1) == cnt)); COCO_ASSERT((CcBitArray_Clone(&ba2, ba0))); COCO_ASSERT((CcBitArray_Equal(ba0, &ba2))); cnt = 0; for (idx = 0; idx < numbits; ++idx) { COCO_ASSERT(CcBitArray_Get(ba0, idx) == CcBitArray_Get(&ba2, idx)); if (CcBitArray_Get(ba0, idx)) ++cnt; } COCO_ASSERT((CcBitArray_Elements(ba0) == cnt)); COCO_ASSERT((CcBitArray_Or(&ba2, ba1) == 0)); CcBitArray_Dump(&ba2, fp, "Or: ", "\n"); for (idx = 0; idx < numbits; ++idx) COCO_ASSERT((CcBitArray_Get(ba0, idx) || CcBitArray_Get(ba1, idx)) == CcBitArray_Get(&ba2, idx)); CcBitArray_Destruct(&ba2); COCO_ASSERT((CcBitArray_Clone(&ba2, ba0))); COCO_ASSERT((CcBitArray_And(&ba2, ba1) == 0)); CcBitArray_Dump(&ba2, fp, "And: ", "\n"); for (idx = 0; idx < numbits; ++idx) COCO_ASSERT((CcBitArray_Get(ba0, idx) && CcBitArray_Get(ba1, idx)) == CcBitArray_Get(&ba2, idx)); CcBitArray_Destruct(&ba2); COCO_ASSERT((CcBitArray_Clone(&ba2, ba0))); CcBitArray_Subtract(&ba2, ba1); CcBitArray_Dump(&ba2, fp, "Subtract: ", "\n"); for (idx = 0; idx < numbits; ++idx) COCO_ASSERT((CcBitArray_Get(ba0, idx) && !CcBitArray_Get(ba1, idx)) == CcBitArray_Get(&ba2, idx)); COCO_ASSERT(!CcBitArray_Intersect(ba1, &ba2)); CcBitArray_Destruct(&ba2); fprintf(fp, "\n"); }