/// <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); }
/// <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); }