/// <summary>
        /// Remove zero's of begining of current System.Collections.JIBitArray
        /// </summary>
        /// <returns></returns>
        public JIBitArray RemoveBeginingZeros()
        {
            JIBitArray RArray = new JIBitArray();

            RArray._bits = this._bits;
            while (RArray._bits.Count != 0 && (bool)RArray._bits[0] == false)
            {
                RArray._bits.RemoveAt(0);
            }
            return(RArray);
        }
        /// <summary>
        /// Retrives a SubJIBitArray from this instance. The SubJIBitArray start at the
        /// specified bit position and has specified length
        /// </summary>
        /// <param name="index">The index of the start of SubJIBitArray</param>
        /// <param name="length">The number of bits in SubJIBitArray</param>
        /// <returns></returns>
        public JIBitArray SubJIBitArray(int index, int length)
        {
            JIBitArray RArray = new JIBitArray(length);
            int        c      = 0;

            for (int i = index; i < index + length; i++)
            {
                RArray.Set(c++, (bool)_bits[i]);
            }
            return(RArray);
        }
 /// <summary>
 /// Insert enough zero at the begining of the specified System.Collections.JIBitArray to
 /// make it's lenght to specified length
 /// </summary>
 /// <param name="Value">The System.Collections.JIBitArray with wich to insert zero to begining</param>
 /// <param name="length">The number of bits of Value after inserting</param>
 /// <returns></returns>
 public static JIBitArray FixLength(JIBitArray Value, int length)
 {
     if (length < Value._bits.Count)
     {
         throw(new ArgumentException("length must be equal or greater than Bits.Length"));
     }
     while (Value._bits.Count < length)
     {
         Value._bits.Insert(0, false);
     }
     return(Value);
 }
        /// <summary>
        /// Shift the bits of current System.Collections.JIBitArray as specified number to
        /// right
        /// </summary>
        /// <param name="count">Specific number to shift right</param>
        /// <returns></returns>
        public JIBitArray ShiftRight(int count)
        {
            JIBitArray RArray = new JIBitArray();

            RArray._bits = this._bits;
            for (int i = 0; i < count; i++)
            {
                RArray._bits.RemoveAt(RArray._bits.Count - 1);
                RArray._bits.Insert(0, false);
            }
            return(RArray);
        }
        /// <summary>
        /// Shift the bits of current System.Collections.JIBitArray as specified number to
        /// left
        /// </summary>
        /// <param name="count">Specific number to shift left</param>
        /// <returns></returns>
        public JIBitArray ShiftLeft(int count)
        {
            JIBitArray RArray = new JIBitArray();

            RArray._bits = this._bits;
            for (int i = 0; i < count; i++)
            {
                RArray._bits.RemoveAt(0);
                RArray._bits.Add(false);
            }
            return(RArray);
        }
        /// <summary>
        /// Convert current System.Collections.JIBitArray to a long array
        /// </summary>
        /// <returns></returns>
        public long[] GetLong()
        {
            int ArrayBound = (int)Math.Ceiling((double)this._bits.Count / 64);

            long[]     Bits = new long[ArrayBound];
            JIBitArray Temp = new JIBitArray();

            Temp._bits = this._bits;
            Temp       = FixLength(Temp, ArrayBound * 64);
            for (int i = 0; i < Temp._bits.Count; i += 64)
            {
                Bits[i / 64] = Convert.ToInt64(Temp.SubJIBitArray(i, 64).ToString(), 2);
            }
            return(Bits);
        }
        /// <summary>
        /// Convert current System.Collections.JIBitArray to a byte array
        /// </summary>
        /// <returns></returns>
        public byte[] GetBytes()
        {
            int ArrayBound = (int)Math.Ceiling((double)this._bits.Count / 8);

            byte[]     Bits = new byte[ArrayBound];
            JIBitArray Temp = new JIBitArray();

            Temp._bits = this._bits;
            Temp       = FixLength(Temp, ArrayBound * 8);

            for (int i = 0; i < Temp._bits.Count; i += 8)
            {
                Bits[i / 8] = Convert.ToByte(Temp.SubJIBitArray(i, 8).ToString(), 2);
            }
            return(Bits);
        }
        /// <summary>
        /// Convert current System.Collections.JIBitArray to a short array
        /// </summary>
        /// <returns></returns>
        public short[] GetShorts()
        {
            int ArrayBound = (int)Math.Ceiling((double)this._bits.Count / 16);

            short[]    Bits = new short[ArrayBound];
            JIBitArray Temp = new JIBitArray();

            Temp._bits = this._bits;
            Temp       = FixLength(Temp, ArrayBound * 16);

            for (int i = 0; i < Temp._bits.Count; i += 16)
            {
                Bits[i / 16] = Convert.ToInt16(Temp.SubJIBitArray(i, 16).ToString(), 2);
            }
            return(Bits);
        }
        /// <summary>
        /// Convert current System.Collections.JIBitArray to a int array
        /// </summary>
        /// <returns></returns>
        public int[] GetInt()
        {
            int ArrayBound = (int)Math.Ceiling((double)this._bits.Count / 32);

            int[]      Bits = new int[ArrayBound];
            JIBitArray Temp = new JIBitArray();

            Temp._bits = this._bits;
            Temp       = FixLength(Temp, ArrayBound * 32);

            for (int i = 0; i < Temp._bits.Count; i += 32)
            {
                Bits[i / 32] = Convert.ToInt32(Temp.SubJIBitArray(i, 32).ToString(), 2);
            }
            return(Bits);
        }
        /// <summary>
        /// Inverts all the bits values in the current System.Collections.JIBitArray, so
        /// that elements set to true are changed to false, and elements set to false
        /// are changed to true
        /// </summary>
        /// <returns></returns>
        public JIBitArray Not()
        {
            JIBitArray RArray = new JIBitArray(_bits.Count);

            for (int i = 0; i < _bits.Count; i++)
            {
                if ((bool)_bits[i] == true)
                {
                    RArray.Set(i, false);
                }
                else
                {
                    RArray.Set(i, true);
                }
            }
            return(RArray);
        }
Esempio n. 11
0
        internal static long GetLong(byte[] arr)
        {
            long       res = 0;
            JIBitArray jb  = new JIBitArray(arr);

            res = 0;
            if (jb.Get(0) == true) //Es negativo hay que hacer complemento a 2
            {
                jb  = jb.Not();
                res = jb.GetLong()[0];
                res = res + 1;
                res = -1 * res;
            }
            else
            {
                res = jb.GetLong()[0];
            }
            return(res);
        }
Esempio n. 12
0
        internal static short GetShort(byte[] arr)
        {
            short      res = 0;
            JIBitArray jb  = new JIBitArray(arr);

            res = 0;
            if (jb.Get(0) == true) //Es negativo hay que hacer complemento a 2
            {
                jb  = jb.Not();
                res = jb.GetShorts()[0];
                res = (short)(res + 1);
                res = (short)(-1 * res);
            }
            else
            {
                res = jb.GetShorts()[0];
            }
            return(res);
        }
        /// <summary>
        /// Perform the bitwise eXclusive OR operation on the elements in the current System.Collections.JIBitArray
        /// against the corresponding elements in the specified System.Collections.JIBitArray
        /// </summary>
        /// <param name="Value">The System.Collections.JIBitArray with which to perform the bitwise eXclusive OR operation</param>
        /// <returns></returns>
        public JIBitArray Xor(JIBitArray Value)
        {
            JIBitArray RArray;
            int        Max = _bits.Count > Value._bits.Count ? _bits.Count : Value._bits.Count;

            RArray       = new JIBitArray(Max);
            RArray._bits = this._bits;

            if (Max == RArray._bits.Count)
            {
                FixLength(Value, Max);
            }
            else
            {
                FixLength(RArray, Max);
            }

            for (int i = 0; i < Max; i++)
            {
                RArray.Set(i, (bool)Value._bits[i] ^ (bool)RArray._bits[i]);
            }

            return(RArray);
        }