/// <summary>
 ///
 /// </summary>
 /// <param name="bits"></param>
 public void ToggleBits(ExtendedBitvector bits)
 {
     for (var x = 0; x < XBI; x++)
     {
         _bits[x] ^= bits.Bits[x];
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="bits"></param>
 public void SetBits(ExtendedBitvector bits)
 {
     for (var x = 0; x < XBI; x++)
     {
         _bits[x] |= bits.Bits[x];
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="bits"></param>
 public void RemoveBits(ExtendedBitvector bits)
 {
     for (var x = 0; x < XBI; x++)
     {
         _bits[x] &= ~bits.Bits[x];
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="clone"></param>
 public ExtendedBitvector(ExtendedBitvector clone)
 {
     _bits = new int[XBI];
     for (var x = 0; x < XBI; x++)
     {
         _bits[x] = clone.Bits[x];
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="bits"></param>
 /// <returns></returns>
 public bool SameBits(ExtendedBitvector bits)
 {
     for (var x = 0; x < XBI; x++)
     {
         if (_bits[x] != bits.Bits[x])
         {
             return(false);
         }
     }
     return(true);
 }
        /// <summary>
        /// AKA meb
        /// </summary>
        /// <param name="bit"></param>
        public static ExtendedBitvector Meb(int bit)
        {
            var bits = new ExtendedBitvector();

            bits.ClearBits();

            if (bit >= 0)
            {
                bits.SetBit(bit);
            }

            return(bits);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="bits"></param>
        /// <returns></returns>
        public int HasBits(ExtendedBitvector bits)
        {
            for (var x = 0; x < XBI; x++)
            {
                var bit = _bits[x] & bits.Bits[x];
                if (bit != 0)
                {
                    return(bit);
                }
            }

            return(0);
        }
        /// <summary>
        /// AKA multimeb
        /// </summary>
        /// <param name="bit"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static ExtendedBitvector MultiMeb(int bit, params int[] args)
        {
            var bits = new ExtendedBitvector();

            bits.ClearBits();

            if (bit < 0)
            {
                return(bits);
            }

            bits.SetBit(bit);

            foreach (var arg in args)
            {
                bits.SetBit(arg);
            }

            return(bits);
        }
Пример #9
0
        /// <summary>
        /// Converts the given string to a bitvector
        /// </summary>
        /// <param name="argument"></param>
        /// <returns></returns>
        public static ExtendedBitvector ToBitvector(this string argument)
        {
            ExtendedBitvector bit = new ExtendedBitvector();
            int x = 0;

            List <string> untrimmed = argument.TrimEnd('~').Split('&').ToList();

            List <string> numbers = new List <string>();

            untrimmed.ForEach(s => numbers.Add(s.Trim()));

            foreach (string number in numbers)
            {
                if (!int.TryParse(number, out int num))
                {
                    continue;
                }

                bit.SetBit(num);
                ++x;
            }

            return(bit);
        }