/// <summary>Bit encode a none-able value into this handle</summary>
        /// <param name="value">Value to encode</param>
        /// <param name="traits"></param>
        public void EncodeNoneable64(long value, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires <ArgumentException>(!traits.IsEmpty);
            Contract.Requires <ArgumentOutOfRangeException>(value.IsNoneOrPositive());

            Bits.BitEncodeEnum((ulong)(value + 1), ref mBits.u64, ref mBitIndex, traits.Bitmask64);
        }
        /// <summary>Bit decode a value from this handle</summary>
        /// <param name="value">Value decoded from this handle</param>
        /// <param name="traits"></param>
        public void DecodeNoneable64(out long value, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires <ArgumentException>(!traits.IsEmpty);

            value = (long)Bits.BitDecodeNoneable(mBits.u64, ref mBitIndex, traits.Bitmask64);
        }
        /// <summary>Bit decode a value from this handle</summary>
        /// <param name="value">Value decoded from this handle</param>
        /// <param name="traits"></param>
        public void DecodeNoneable32(out int value, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires <ArgumentException>(!traits.IsEmpty);

            value = (int)Bits.BitDecodeNoneable(mBits.u64, ref mBitIndex, traits.Bitmask32);
        }
        /// <summary>Bit encode a value into this handle</summary>
        /// <param name="value">Value to encode</param>
        /// <param name="traits"></param>
        public void Encode64(ulong value, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires <ArgumentException>(!traits.IsEmpty);

            Bits.BitEncodeEnum(value, ref mBits.u64, ref mBitIndex, traits.Bitmask64);
        }