D 2.0
About Japanese Translation

Last update Thu Sep 16 11:25:55 2010

std.bitmanip

ビットレベル操作の機能を集めたモジュールです。

Source:
std/bitmanip.d

License:
Boost License 1.0

Authors:
Walter Bright, Andrei Alexandrescu

template bitfields(T...)
構造体やクラス内にビットフィールドを構築します。

Example:
struct A
{
    int a;
    mixin(bitfields!(
        uint, "x",    2,
        int,  "y",    3,
        uint, "z",    2,
        bool, "flag", 1));
}
A obj;
obj.x = 2;
obj.z = obj.x;
上の例では、合計 8 ビットをパックして1個の ubyte に納めた ビットフィールドが生成されます。ビットフィールドは、最下位ビットから割り当てられます。 つまり、 この例では x がビットフィールドの最下位2ビットを占めることになります。

一つのビットフィールドインスタンスのビット長合計は、 ぴったり 8, 16, 32, 64 のいずれかになっている必要があります。パディングが必要ならば、 名前が空のフィールドを用意してください。

Example:
struct A
{
    mixin(bitfields!(
        bool, "flag1",    1,
        bool, "flag2",    1,
        uint, "",         6));
}
ビットフィールドの型は、任意の整数もしくはenum型とすることができます。 ビットフィールドにもっとも効率よく格納できる型は bool で、次に符号付き整数、最後に符号無し整数という順番になっています。

struct FloatRep;
float の仮数部、指数部、 符号部を別個に操作することができます。定義は以下の通りです:

struct FloatRep
{
    union
    {
        float value;
        mixin(bitfields!(
                  uint,  "fraction", 23,
                  ubyte, "exponent",  8,
                  bool,  "sign",      1));
    }
    enum uint bias = 127, fractionBits = 23, exponentBits = 8, signBits = 1;
}


struct DoubleRep;
double の仮数部、指数部、 符号部を別個に操作することができます。定義は以下の通りです:

struct DoubleRep
{
    union
    {
        double value;
        mixin(bitfields!(
                  ulong,   "fraction", 52,
                  ushort,  "exponent", 11,
                  bool,    "sign",      1));
    }
    enum uint bias = 1023, signBits = 1, fractionBits = 52, exponentBits = 11;
}


struct BitArray;
bitの配列です

const bool opIndex(size_t i);
bool opIndexAssign(bool b, size_t i);
BitArray の 配列 [index] 演算

BitArray dup();
BitArray の .dup プロパティ

int opApply(scope int delegate(ref bool) dg);
int opApply(scope int delegate(ref uint, ref bool) dg);
BitArray の foreach のサポート

BitArray reverse();
BitArray の .reverse プロパティ

BitArray sort();
BitArray の .sort プロパティ

const bool opEquals(ref const BitArray a2);
BitArray の == と != 演算子

int opCmp(BitArray a2);
比較演算子の実装

void init(bool[] ba);
BitArray を ba[] の内容で初期化します

void init(void[] v, size_t numbits);
配列 v[] 上のサイズ numbits ビットのビューとなる BitArray を構築します。データのコピーは行われません。

これは opCast の逆演算に当たります。

void[] opCast();
void[] への変換

BitArray opCom();
BitArray の単項 ~ 演算子

BitArray opAnd(BitArray e2);
BitArray の二項 & 演算子

BitArray opOr(BitArray e2);
BitArray の | 演算子

BitArray opXor(BitArray e2);
BitArray の ^ 演算子

BitArray opSub(BitArray e2);
BitArray の - 演算子

BitArray 間の演算 a - b は、ビット演算 a & ~b と同じ意味になります

BitArray opAndAssign(BitArray e2);
BitArray の &= 演算子

BitArray opOrAssign(BitArray e2);
BitArray の |= 演算子

BitArray opXorAssign(BitArray e2);
BitArray の ^= 演算子

BitArray opSubAssign(BitArray e2);
BitArray の -= 演算子

BitArray 間の演算 a -= ba &= ~b と同じ意味になります

BitArray opCatAssign(bool b);
BitArray opCatAssign(BitArray b);
BitArray の ~= 演算

BitArray opCat(bool b);
BitArray opCat_r(bool b);
BitArray opCat(BitArray b);
BitArray の結合 ~ 演算