w_base_t::int4_t w_bitmap_t::first_clr(uint4_t start) const { w_assert9(start < sz); register uint1_t* p = ptr + div8(start); register uint4_t mask = 1 << mod8(start); register uint4_t size = sz; for (size -= start; size; start++, size--) { if ((*p & mask) == 0) { return start; } if ((mask <<= 1) == 0x100) { mask = 1; p++; } } return -1; }
static void split_into8( word r, word g, word b, int n, byte *inxs ) { byte inx; if ( n >= 9 ) { inx = takefrom8(div9(r), div9(g), div9(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; inx = takefrom8(div8(r), div8(g), div8(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; inx = takefrom8(div7(r), div7(g), div7(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; } if ( n >= 6 ) { inx = takefrom8(div6(r), div6(g), div6(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; inx = takefrom8(div5(r), div5(g), div5(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; } if ( n >= 4 ) { inx = takefrom8(div4(r), div4(g), div4(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; } if ( n >= 3 ) { inx = takefrom8(div3(r), div3(g), div3(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; } inx = takefrom8(div2(r), div2(g), div2(b)); b -= gbmrgb_8[inx].b; g -= gbmrgb_8[inx].g; r -= gbmrgb_8[inx].r; *inxs++ = inx; *inxs = takefrom8(r, g, b); }
void w_bitmap_t::clr(uint4_t offset) { ptr[div8(offset)] &= ~(1 << mod8(offset)); }
void w_bitmap_t::set(uint4_t offset) { ptr[div8(offset)] |= (1 << mod8(offset)); }
bool w_bitmap_t::is_set(uint4_t offset) const { return (ptr[div8(offset)] & (1 << mod8(offset))) != 0; }
int w_bitmap_t::bytesForBits(uint4_t numBits) { return (div8(numBits -1) + 1); }