aboutsummaryrefslogtreecommitdiff
path: root/BDInfo/BitVector32.cs
diff options
context:
space:
mode:
authorstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
committerstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
commit48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch)
tree8dae77a31670a888d733484cb17dd4077d5444e8 /BDInfo/BitVector32.cs
parentc32d8656382a0eacb301692e0084377fc433ae9b (diff)
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'BDInfo/BitVector32.cs')
-rw-r--r--BDInfo/BitVector32.cs308
1 files changed, 0 insertions, 308 deletions
diff --git a/BDInfo/BitVector32.cs b/BDInfo/BitVector32.cs
deleted file mode 100644
index 1ac94bfbe..000000000
--- a/BDInfo/BitVector32.cs
+++ /dev/null
@@ -1,308 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BDInfo
-{
- using System.Diagnostics;
- using System.Text;
- using System;
-
- /// <devdoc>
- /// <para>Provides a simple light bit vector with easy integer or Boolean access to
- /// a 32 bit storage.</para>
- /// </devdoc>
- public struct BitVector32
- {
- private uint data;
-
- /// <devdoc>
- /// <para>Initializes a new instance of the BitVector32 structure with the specified internal data.</para>
- /// </devdoc>
- public BitVector32(int data)
- {
- this.data = (uint)data;
- }
-
- /// <devdoc>
- /// <para>Initializes a new instance of the BitVector32 structure with the information in the specified
- /// value.</para>
- /// </devdoc>
- public BitVector32(BitVector32 value)
- {
- this.data = value.data;
- }
-
- /// <devdoc>
- /// <para>Gets or sets a value indicating whether all the specified bits are set.</para>
- /// </devdoc>
- public bool this[int bit]
- {
- get
- {
- return (data & bit) == (uint)bit;
- }
- set
- {
- if (value)
- {
- data |= (uint)bit;
- }
- else
- {
- data &= ~(uint)bit;
- }
- }
- }
-
- /// <devdoc>
- /// <para>Gets or sets the value for the specified section.</para>
- /// </devdoc>
- public int this[Section section]
- {
- get
- {
- return (int)((data & (uint)(section.Mask << section.Offset)) >> section.Offset);
- }
- set
- {
- value <<= section.Offset;
- int offsetMask = (0xFFFF & (int)section.Mask) << section.Offset;
- data = (data & ~(uint)offsetMask) | ((uint)value & (uint)offsetMask);
- }
- }
-
- /// <devdoc>
- /// returns the raw data stored in this bit vector...
- /// </devdoc>
- public int Data
- {
- get
- {
- return (int)data;
- }
- }
-
- private static short CountBitsSet(short mask)
- {
-
- // yes, I know there are better algorithms, however, we know the
- // bits are always right aligned, with no holes (i.e. always 00000111,
- // never 000100011), so this is just fine...
- //
- short value = 0;
- while ((mask & 0x1) != 0)
- {
- value++;
- mask >>= 1;
- }
- return value;
- }
-
- /// <devdoc>
- /// <para> Creates the first mask in a series.</para>
- /// </devdoc>
- public static int CreateMask()
- {
- return CreateMask(0);
- }
-
- /// <devdoc>
- /// Creates the next mask in a series.
- /// </devdoc>
- public static int CreateMask(int previous)
- {
- if (previous == 0)
- {
- return 1;
- }
-
- if (previous == unchecked((int)0x80000000))
- {
- throw new InvalidOperationException("Bit vector full");
- }
-
- return previous << 1;
- }
-
- /// <devdoc>
- /// Given a highValue, creates the mask
- /// </devdoc>
- private static short CreateMaskFromHighValue(short highValue)
- {
- short required = 16;
- while ((highValue & 0x8000) == 0)
- {
- required--;
- highValue <<= 1;
- }
-
- ushort value = 0;
- while (required > 0)
- {
- required--;
- value <<= 1;
- value |= 0x1;
- }
-
- return unchecked((short)value);
- }
-
- /// <devdoc>
- /// <para>Creates the first section in a series, with the specified maximum value.</para>
- /// </devdoc>
- public static Section CreateSection(short maxValue)
- {
- return CreateSectionHelper(maxValue, 0, 0);
- }
-
- /// <devdoc>
- /// <para>Creates the next section in a series, with the specified maximum value.</para>
- /// </devdoc>
- public static Section CreateSection(short maxValue, Section previous)
- {
- return CreateSectionHelper(maxValue, previous.Mask, previous.Offset);
- }
-
- private static Section CreateSectionHelper(short maxValue, short priorMask, short priorOffset)
- {
- if (maxValue < 1)
- {
- throw new ArgumentOutOfRangeException("maxValue");
- }
-#if DEBUG
- int maskCheck = CreateMaskFromHighValue(maxValue);
- int offsetCheck = priorOffset + CountBitsSet(priorMask);
- Debug.Assert(maskCheck <= short.MaxValue && offsetCheck < 32, "Overflow on BitVector32");
-#endif
- short offset = (short)(priorOffset + CountBitsSet(priorMask));
- if (offset >= 32)
- {
- throw new InvalidOperationException("Bit vector full");
- }
- return new Section(CreateMaskFromHighValue(maxValue), offset);
- }
-
- public override bool Equals(object o)
- {
- if (!(o is BitVector32))
- {
- return false;
- }
-
- return data == ((BitVector32)o).data;
- }
-
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
-
- /// <devdoc>
- /// </devdoc>
- public static string ToString(BitVector32 value)
- {
- StringBuilder sb = new StringBuilder(/*"BitVector32{".Length*/12 + /*32 bits*/32 + /*"}".Length"*/1);
- sb.Append("BitVector32{");
- int locdata = (int)value.data;
- for (int i = 0; i < 32; i++)
- {
- if ((locdata & 0x80000000) != 0)
- {
- sb.Append("1");
- }
- else
- {
- sb.Append("0");
- }
- locdata <<= 1;
- }
- sb.Append("}");
- return sb.ToString();
- }
-
- /// <devdoc>
- /// </devdoc>
- public override string ToString()
- {
- return BitVector32.ToString(this);
- }
-
- /// <devdoc>
- /// <para>
- /// Represents an section of the vector that can contain a integer number.</para>
- /// </devdoc>
- public struct Section
- {
- private readonly short mask;
- private readonly short offset;
-
- internal Section(short mask, short offset)
- {
- this.mask = mask;
- this.offset = offset;
- }
-
- public short Mask
- {
- get
- {
- return mask;
- }
- }
-
- public short Offset
- {
- get
- {
- return offset;
- }
- }
-
- public override bool Equals(object o)
- {
- if (o is Section)
- return Equals((Section)o);
- else
- return false;
- }
-
- public bool Equals(Section obj)
- {
- return obj.mask == mask && obj.offset == offset;
- }
-
- public static bool operator ==(Section a, Section b)
- {
- return a.Equals(b);
- }
-
- public static bool operator !=(Section a, Section b)
- {
- return !(a == b);
- }
-
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
-
- /// <devdoc>
- /// </devdoc>
- public static string ToString(Section value)
- {
- return "Section{0x" + Convert.ToString(value.Mask, 16) + ", 0x" + Convert.ToString(value.Offset, 16) + "}";
- }
-
- /// <devdoc>
- /// </devdoc>
- public override string ToString()
- {
- return Section.ToString(this);
- }
-
- }
- }
-}