The OpenD Programming Language

bts

Tests and sets the bit.

nothrow @safe @nogc pragma(inline, true) pure @system
int
bts
(
size_t* p
,
size_t bitnum
)

Parameters

p size_t*

a non-NULL pointer to an array of size_ts.

bitnum size_t

a bit number, starting with bit 0 of p[0], and progressing. It addresses bits like the expression:

p[index / (size_t.sizeof*8)] & (1 << (index & ((size_t.sizeof*8) - 1)))

Return Value

Type: int

A non-zero value if the bit was set, and a zero if it was clear.

Examples

@system pure bool testbitset()
{
    size_t[2] array;

    array[0] = 2;
    array[1] = 0x100;

    assert(btc(array.ptr, 35) == 0);
    if (size_t.sizeof == 8)
    {
        assert(array[0] == 0x8_0000_0002);
        assert(array[1] == 0x100);
    }
    else
    {
        assert(array[0] == 2);
        assert(array[1] == 0x108);
    }

    assert(btc(array.ptr, 35));
    assert(array[0] == 2);
    assert(array[1] == 0x100);

    assert(bts(array.ptr, 35) == 0);
    if (size_t.sizeof == 8)
    {
        assert(array[0] == 0x8_0000_0002);
        assert(array[1] == 0x100);
    }
    else
    {
        assert(array[0] == 2);
        assert(array[1] == 0x108);
    }

    assert(btr(array.ptr, 35));
    assert(array[0] == 2);
    assert(array[1] == 0x100);

    return true;
}

enum b = testbitset(); // CTFE test
testbitset(); // runtime test

Meta