std.bitmanip
ビットレベル操作の機能を集めたモジュールです。 Source:std/bitmanip.d
License:
Boost License 1.0 Authors:
Walter Bright, Andrei Alexandrescu
- 構造体やクラス内にビットフィールドを構築します。
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 で、次に符号付き整数、最後に符号無し整数という順番になっています。
- 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; }
- 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; }
- bitの配列です
- BitArray の 配列 [index] 演算
- BitArray の .dup プロパティ
- BitArray の foreach のサポート
- BitArray の .reverse プロパティ
- BitArray の .sort プロパティ
- BitArray の == と != 演算子
- 比較演算子の実装
- BitArray を ba[] の内容で初期化します
- 配列 v[] 上のサイズ numbits ビットのビューとなる BitArray
を構築します。データのコピーは行われません。
これは opCast の逆演算に当たります。
- void[] への変換
- BitArray の単項 ~ 演算子
- BitArray の二項 & 演算子
- BitArray の | 演算子
- BitArray の ^ 演算子
- BitArray の - 演算子
BitArray 間の演算 a - b は、ビット演算 a & ~b と同じ意味になります
- BitArray の &= 演算子
- BitArray の |= 演算子
- BitArray の ^= 演算子
- BitArray の -= 演算子
BitArray 間の演算 a -= b は a &= ~b と同じ意味になります
- BitArray の ~= 演算
- BitArray の結合 ~ 演算