Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
	}
Ejemplo n.º 3
0
void
w_bitmap_t::clr(uint4_t offset)
{
    ptr[div8(offset)] &= ~(1 << mod8(offset));
}
Ejemplo n.º 4
0
void 
w_bitmap_t::set(uint4_t offset)
{
    ptr[div8(offset)] |= (1 << mod8(offset));
}
Ejemplo n.º 5
0
bool 
w_bitmap_t::is_set(uint4_t offset) const
{
    return (ptr[div8(offset)] & (1 << mod8(offset))) != 0; 
}
Ejemplo n.º 6
0
int
w_bitmap_t::bytesForBits(uint4_t numBits)
{
    return (div8(numBits -1) + 1);
}