예제 #1
0
        public static ushort BitDecode(ushort bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);
            Contract.Requires/*<ArgumentOutOfRangeException>*/ (traits.BitIndex < kInt16BitCount);
            Contract.Requires/*<ArgumentOutOfRangeException>*/ (traits.BitIndex + traits.BitCount <= kInt16BitCount);

            return((ushort)((bits >> traits.BitIndex) & traits.Bitmask16));
        }
예제 #2
0
        public static ulong BitEncode(ulong value, ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            var bitmask = traits.Bitmask64;

            // Use the bit mask's invert so we can get all of the non-value bits
            return(BitEncodeFlags(value, bits & (~bitmask), traits.BitIndex, bitmask));
        }
예제 #3
0
        public static ushort BitEncode(ushort value, ushort bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);
            Contract.Requires/*<ArgumentOutOfRangeException>*/ (traits.BitIndex < kInt16BitCount);
            Contract.Requires/*<ArgumentOutOfRangeException>*/ (traits.BitIndex + traits.BitCount <= kInt16BitCount);

            var bitmask = (uint)traits.Bitmask16;

            // Use the bit mask's invert so we can get all of the non-value bits
            return((ushort)BitEncodeFlags(value, bits & (~bitmask), traits.BitIndex, bitmask));
        }
예제 #4
0
        public TEnum BitDecode(ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires(!traits.IsEmpty);

            return(BitDecode(bits, traits.BitIndex));
        }
예제 #5
0
        public ulong BitEncode(TEnum value, ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires(!traits.IsEmpty);

            return(BitEncode(value, bits, traits.BitIndex));
        }
예제 #6
0
        public static int BitDecodeNoneable(uint bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((int)BitDecode(bits, traits.BitIndex, traits.Bitmask32) - 1);
        }
예제 #7
0
        public static uint BitDecode(uint bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((bits >> traits.BitIndex) & traits.Bitmask32);
        }
예제 #8
0
        public static long BitDecodeNoneable(ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((long)BitDecode(bits, traits.BitIndex, traits.Bitmask64) - 1);
        }
예제 #9
0
        public static BitFieldTraits For <TUInt>(IEnumBitEncoder <TUInt> enumEncoder, BitFieldTraits prev)
        {
            Contract.Requires(enumEncoder != null);

            return(new BitFieldTraits(enumEncoder.BitCountTrait, prev));
        }
예제 #10
0
 public BitFieldTraits(int bitCount, BitFieldTraits prev)
     : this(false, bitCount, prev.NextFieldBitIndex)
 {
     Contract.Requires <ArgumentOutOfRangeException>(bitCount > 0 && bitCount <= kMaxBitCount);
     Contract.Requires <ArgumentException>((prev.NextFieldBitIndex + bitCount) <= kMaxBitCount);
 }
예제 #11
0
 public TEnum BitEncode(uint bits, Bitwise.BitFieldTraits traits)
 {
     return(BitDecode(bits, traits.BitIndex));
 }
예제 #12
0
 public ushort BitEncode(TEnum value, ushort bits, Bitwise.BitFieldTraits traits)
 {
     return((ushort)BitEncode(value, bits, traits.BitIndex));
 }