Пример #1
0
 /// <summary>
 /// Read arbitraty byte sequence
 /// </summary>
 /// <returns>The get bytes.</returns>
 /// <param name="DataOffset">Data offset.</param>
 /// <param name="DataSize">Data size.</param>
 public byte[] DataGetBytes(long DataOffset, long DataSize, byte[] DataArray)
 {
     Monitor.Enter(DataF_);
     if (ParamDataFile != null)
     {
         if (IsDummyFile)
         {
             long DataSize_ = DummyFileSize - DataOffset;
             if (DataSize_ > DataSize)
             {
                 DataSize_ = DataSize;
             }
             byte[] DataArray_ = RandomSequence_.GenSeq(DataOffset, DataSize_);
             for (int i = 0; i < DataSize_; i++)
             {
                 DataArray[i] = DataArray_[i];
             }
         }
         else
         {
             //FileStream DataS = DataOpen();
             if (ParamDigestMode)
             {
                 throw new Exception("Data segment cannot be read from digest file");
             }
             else
             {
                 long DataSize_ = ParamValueFStream.Length - DataOffset;
                 if (DataSize_ > DataSize)
                 {
                     DataSize_ = DataSize;
                 }
                 ParamValueFStream.Seek(DataOffset, SeekOrigin.Begin);
                 ParamValueFStream.Read(DataArray, 0, (int)DataSize_);
             }
             //DataS.Close();
         }
     }
     else
     {
         for (int i = 0; i < DataArray.Length; i++)
         {
             DataArray[i] = 0;
         }
     }
     Monitor.Exit(DataF_);
     return(DataArray);
 }
Пример #2
0
        public void DataValueGet(int SegmentNo, ref int[][] DataVals, int DataOffset, int DataPos)
        {
            int DataValueSizeValuesDataOffset = (int)DataValueSizeValues + DataOffset;

            byte[] SegmentData = null;
            if (ParamDataFile != null)
            {
                if (IsDummyFile)
                {
                    long SegmentOffset = SegmentNo;
                    SegmentOffset = SegmentOffset * SegmentSize + DataValueByteOffset;
                    long SegmentSize_ = DummyFileSize - SegmentOffset;
                    if (SegmentSize_ > 0)
                    {
                        Monitor.Enter(DataF_);
                        SegmentData = RandomSequence_.GenSeq(SegmentOffset, SegmentSize_);
                        Monitor.Exit(DataF_);
                        for (long i = SegmentSize_; i < DataValueSizeBytes; i++)
                        {
                            SegmentData[i] = 0;
                        }
                    }
                    else
                    {
                        for (long i = 0; i < DataValueSizeBytes; i++)
                        {
                            SegmentData[i] = 0;
                        }
                    }
                }
                else
                {
                    long SegmentOffset = SegmentNo;
                    if (ParamDigestMode)
                    {
                        throw new Exception("Data value cannot be read from digest file");
                    }
                    else
                    {
                        SegmentOffset = SegmentOffset * SegmentSize + DataValueByteOffset;
                        long SegmentSize_ = Math.Min(DataValueSizeBytes, ParamValueFStream.Length - SegmentOffset);
                        if (SegmentSize_ > 0)
                        {
                            SegmentData = new byte[DataValueSizeBytes];
                            Monitor.Enter(DataF_);
                            ParamValueFStream.Seek(SegmentOffset, SeekOrigin.Begin);
                            ParamValueFStream.Read(SegmentData, 0, (int)SegmentSize_);
                            Monitor.Exit(DataF_);
                            for (long i = SegmentSize_; i < DataValueSizeBytes; i++)
                            {
                                SegmentData[i] = 0;
                            }
                        }
                    }
                }

                if (SegmentData != null)
                {
                    int i_ = 0;
                    switch (DataValueNumOfBits)
                    {
                    case 2:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_]) >> 6;
                            DataVals[i + 1][DataPos] = (((int)SegmentData[i_]) >> 4) & 3;
                            DataVals[i + 2][DataPos] = (((int)SegmentData[i_]) >> 2) & 3;
                            DataVals[i + 3][DataPos] = ((int)SegmentData[i_]) & 3;
                            i_ += 1;
                        }
                    }
                    break;

                    case 3:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_ + 0]) >> 5;
                            DataVals[i + 1][DataPos] = (((int)SegmentData[i_ + 0]) >> 2) & 7;
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 0]) & 3) << 1) + (((int)SegmentData[i_ + 1]) >> 7);
                            DataVals[i + 3][DataPos] = (((int)SegmentData[i_ + 1]) >> 4) & 7;
                            DataVals[i + 4][DataPos] = (((int)SegmentData[i_ + 1]) >> 1) & 7;
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 1]) & 1) << 2) + (((int)SegmentData[i_ + 2]) >> 6);
                            DataVals[i + 6][DataPos] = (((int)SegmentData[i_ + 2]) >> 3) & 7;
                            DataVals[i + 7][DataPos] = ((int)SegmentData[i_ + 2]) & 7;
                            i_ += 3;
                        }
                    }
                    break;

                    case 4:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 2)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_]) >> 4;
                            DataVals[i + 1][DataPos] = ((int)SegmentData[i_]) & 15;
                            i_ += 1;
                        }
                    }
                    break;

                    case 5:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_ + 0]) >> 3;
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 0]) & 7) << 2) + (((int)SegmentData[i_ + 1]) >> 6);
                            DataVals[i + 2][DataPos] = (((int)SegmentData[i_ + 1]) >> 1) & 31;
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 1]) & 1) << 4) + (((int)SegmentData[i_ + 2]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 2]) & 15) << 1) + (((int)SegmentData[i_ + 3]) >> 7);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 3]) >> 2) & 31);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 3]) & 3) << 3) + (((int)SegmentData[i_ + 4]) >> 5);
                            DataVals[i + 7][DataPos] = ((int)SegmentData[i_ + 4]) & 31;
                            i_ += 5;
                        }
                    }
                    break;

                    case 6:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_ + 0]) >> 2;
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 0]) & 3) << 4) + (((int)SegmentData[i_ + 1]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 1]) & 15) << 2) + (((int)SegmentData[i_ + 2]) >> 6);
                            DataVals[i + 3][DataPos] = ((int)SegmentData[i_ + 2]) & 63;
                            i_ += 3;
                        }
                    }
                    break;

                    case 7:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = ((int)SegmentData[i_ + 0]) >> 1;
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 0]) & 1) << 6) + (((int)SegmentData[i_ + 1]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 1]) & 3) << 5) + (((int)SegmentData[i_ + 2]) >> 3);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 2]) & 7) << 4) + (((int)SegmentData[i_ + 3]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 3]) & 15) << 3) + (((int)SegmentData[i_ + 4]) >> 5);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 4]) & 31) << 2) + (((int)SegmentData[i_ + 5]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 5]) & 63) << 1) + (((int)SegmentData[i_ + 6]) >> 7);
                            DataVals[i + 7][DataPos] = ((int)SegmentData[i_ + 6]) & 127;
                            i_ += 7;
                        }
                    }
                    break;

                    case 8:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i++)
                        {
                            DataVals[i][DataPos] = ((int)SegmentData[i_ + 0]);
                            i_ += 1;
                        }
                    }
                    break;

                    case 9:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 1) + (((int)SegmentData[i_ + 1]) >> 7);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 127) << 2) + (((int)SegmentData[i_ + 2]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 2]) & 63) << 3) + (((int)SegmentData[i_ + 3]) >> 5);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 3]) & 31) << 4) + (((int)SegmentData[i_ + 4]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 4]) & 15) << 5) + (((int)SegmentData[i_ + 5]) >> 3);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 5]) & 7) << 6) + (((int)SegmentData[i_ + 6]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 6]) & 3) << 7) + (((int)SegmentData[i_ + 7]) >> 1);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 7]) & 1) << 8) + ((int)SegmentData[i_ + 8]);
                            i_ += 9;
                        }
                    }
                    break;

                    case 10:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 2) + (((int)SegmentData[i_ + 1]) >> 6);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 63) << 4) + (((int)SegmentData[i_ + 2]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 2]) & 15) << 6) + (((int)SegmentData[i_ + 3]) >> 2);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 3]) & 3) << 8) + ((int)SegmentData[i_ + 4]);
                            i_ += 5;
                        }
                    }
                    break;

                    case 11:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 3) + (((int)SegmentData[i_ + 1]) >> 5);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 31) << 6) + (((int)SegmentData[i_ + 2]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 2]) & 3) << 9) + (((int)SegmentData[i_ + 3]) << 1) + (((int)SegmentData[i_ + 4]) >> 7);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 4]) & 127) << 4) + (((int)SegmentData[i_ + 5]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 5]) & 15) << 7) + (((int)SegmentData[i_ + 6]) >> 1);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 6]) & 1) << 10) + (((int)SegmentData[i_ + 7]) << 2) + (((int)SegmentData[i_ + 8]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 8]) & 63) << 5) + (((int)SegmentData[i_ + 9]) >> 3);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 9]) & 7) << 8) + ((int)SegmentData[i_ + 10]);
                            i_ += 11;
                        }
                    }
                    break;

                    case 12:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 2)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 4) + (((int)SegmentData[i_ + 1]) >> 4);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 15) << 8) + ((int)SegmentData[i_ + 2]);
                            i_ += 3;
                        }
                    }
                    break;

                    case 13:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 5) + (((int)SegmentData[i_ + 1]) >> 3);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 7) << 10) + (((int)SegmentData[i_ + 2]) << 2) + (((int)SegmentData[i_ + 3]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 3]) & 63) << 7) + (((int)SegmentData[i_ + 4]) >> 1);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 4]) & 1) << 12) + (((int)SegmentData[i_ + 5]) << 4) + (((int)SegmentData[i_ + 6]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 6]) & 15) << 9) + (((int)SegmentData[i_ + 7]) << 1) + (((int)SegmentData[i_ + 8]) >> 7);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 8]) & 127) << 6) + (((int)SegmentData[i_ + 9]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 9]) & 3) << 11) + (((int)SegmentData[i_ + 10]) << 3) + (((int)SegmentData[i_ + 11]) >> 5);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 11]) & 31) << 8) + ((int)SegmentData[i_ + 12]);
                            i_ += 13;
                        }
                    }
                    break;

                    case 14:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 6) + (((int)SegmentData[i_ + 1]) >> 2);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 3) << 12) + (((int)SegmentData[i_ + 2]) << 4) + (((int)SegmentData[i_ + 3]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 3]) & 15) << 10) + (((int)SegmentData[i_ + 4]) << 2) + (((int)SegmentData[i_ + 5]) >> 6);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 5]) & 63) << 8) + ((int)SegmentData[i_ + 6]);
                            i_ += 7;
                        }
                    }
                    break;

                    case 15:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 7) + (((int)SegmentData[i_ + 1]) >> 1);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 1]) & 1) << 14) + (((int)SegmentData[i_ + 2]) << 6) + (((int)SegmentData[i_ + 3]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 3]) & 3) << 13) + (((int)SegmentData[i_ + 4]) << 5) + (((int)SegmentData[i_ + 5]) >> 3);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 5]) & 7) << 12) + (((int)SegmentData[i_ + 6]) << 4) + (((int)SegmentData[i_ + 7]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 7]) & 15) << 11) + (((int)SegmentData[i_ + 8]) << 3) + (((int)SegmentData[i_ + 9]) >> 5);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 9]) & 31) << 10) + (((int)SegmentData[i_ + 10]) << 2) + (((int)SegmentData[i_ + 11]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 11]) & 63) << 9) + (((int)SegmentData[i_ + 12]) << 1) + (((int)SegmentData[i_ + 13]) >> 7);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 13]) & 127) << 8) + ((int)SegmentData[i_ + 14]);
                            i_ += 15;
                        }
                    }
                    break;

                    case 16:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i++)
                        {
                            DataVals[i][DataPos] = ((((int)SegmentData[i_ + 0]) << 8) + ((int)SegmentData[i_ + 1]));
                            i_ += 2;
                        }
                    }
                    break;

                    case 17:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 9) + (((int)SegmentData[i_ + 1]) << 1) + (((int)SegmentData[i_ + 2]) >> 7);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 127) << 10) + (((int)SegmentData[i_ + 3]) << 2) + (((int)SegmentData[i_ + 4]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 4]) & 63) << 11) + (((int)SegmentData[i_ + 5]) << 3) + (((int)SegmentData[i_ + 6]) >> 5);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 6]) & 31) << 12) + (((int)SegmentData[i_ + 7]) << 4) + (((int)SegmentData[i_ + 8]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 8]) & 15) << 13) + (((int)SegmentData[i_ + 9]) << 5) + (((int)SegmentData[i_ + 10]) >> 3);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 10]) & 7) << 14) + (((int)SegmentData[i_ + 11]) << 6) + (((int)SegmentData[i_ + 12]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 12]) & 3) << 15) + (((int)SegmentData[i_ + 13]) << 7) + (((int)SegmentData[i_ + 14]) >> 1);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 14]) & 1) << 16) + (((int)SegmentData[i_ + 15]) << 8) + ((int)SegmentData[i_ + 16]);
                            i_ += 17;
                        }
                    }
                    break;

                    case 18:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 10) + (((int)SegmentData[i_ + 1]) << 2) + (((int)SegmentData[i_ + 2]) >> 6);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 63) << 12) + (((int)SegmentData[i_ + 3]) << 4) + (((int)SegmentData[i_ + 4]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 4]) & 15) << 14) + (((int)SegmentData[i_ + 5]) << 6) + (((int)SegmentData[i_ + 6]) >> 2);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 6]) & 3) << 16) + (((int)SegmentData[i_ + 7]) << 8) + ((int)SegmentData[i_ + 8]);
                            i_ += 9;
                        }
                    }
                    break;

                    case 19:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 11) + (((int)SegmentData[i_ + 1]) << 3) + (((int)SegmentData[i_ + 2]) >> 5);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 31) << 14) + (((int)SegmentData[i_ + 3]) << 6) + (((int)SegmentData[i_ + 4]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 4]) & 3) << 17) + (((int)SegmentData[i_ + 5]) << 9) + (((int)SegmentData[i_ + 6]) << 1) + (((int)SegmentData[i_ + 7]) >> 7);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 7]) & 127) << 12) + (((int)SegmentData[i_ + 8]) << 4) + (((int)SegmentData[i_ + 9]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 9]) & 15) << 15) + (((int)SegmentData[i_ + 10]) << 7) + (((int)SegmentData[i_ + 11]) >> 1);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 11]) & 1) << 18) + (((int)SegmentData[i_ + 12]) << 10) + (((int)SegmentData[i_ + 13]) << 2) + (((int)SegmentData[i_ + 14]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 14]) & 63) << 13) + (((int)SegmentData[i_ + 15]) << 5) + (((int)SegmentData[i_ + 16]) >> 3);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 16]) & 7) << 16) + (((int)SegmentData[i_ + 17]) << 8) + ((int)SegmentData[i_ + 18]);
                            i_ += 19;
                        }
                    }
                    break;

                    case 20:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 2)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 12) + (((int)SegmentData[i_ + 1]) << 4) + (((int)SegmentData[i_ + 2]) >> 4);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 15) << 16) + (((int)SegmentData[i_ + 3]) << 8) + ((int)SegmentData[i_ + 4]);
                            i_ += 5;
                        }
                    }
                    break;

                    case 21:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 13) + (((int)SegmentData[i_ + 1]) << 5) + (((int)SegmentData[i_ + 2]) >> 3);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 7) << 18) + (((int)SegmentData[i_ + 3]) << 10) + (((int)SegmentData[i_ + 4]) << 2) + (((int)SegmentData[i_ + 5]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 5]) & 63) << 15) + (((int)SegmentData[i_ + 6]) << 7) + (((int)SegmentData[i_ + 7]) >> 1);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 7]) & 1) << 20) + (((int)SegmentData[i_ + 8]) << 12) + (((int)SegmentData[i_ + 9]) << 4) + (((int)SegmentData[i_ + 10]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 10]) & 15) << 17) + (((int)SegmentData[i_ + 11]) << 9) + (((int)SegmentData[i_ + 12]) << 1) + (((int)SegmentData[i_ + 13]) >> 7);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 13]) & 127) << 14) + (((int)SegmentData[i_ + 14]) << 6) + (((int)SegmentData[i_ + 15]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 15]) & 3) << 19) + (((int)SegmentData[i_ + 16]) << 11) + (((int)SegmentData[i_ + 17]) << 3) + (((int)SegmentData[i_ + 18]) >> 5);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 18]) & 31) << 16) + (((int)SegmentData[i_ + 19]) << 8) + ((int)SegmentData[i_ + 20]);
                            i_ += 21;
                        }
                    }
                    break;

                    case 22:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 14) + (((int)SegmentData[i_ + 1]) << 6) + (((int)SegmentData[i_ + 2]) >> 2);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 3) << 20) + (((int)SegmentData[i_ + 3]) << 12) + (((int)SegmentData[i_ + 4]) << 4) + (((int)SegmentData[i_ + 5]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 5]) & 15) << 18) + (((int)SegmentData[i_ + 6]) << 10) + (((int)SegmentData[i_ + 7]) << 2) + (((int)SegmentData[i_ + 8]) >> 6);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 8]) & 63) << 16) + (((int)SegmentData[i_ + 9]) << 8) + ((int)SegmentData[i_ + 10]);
                            i_ += 11;
                        }
                    }
                    break;

                    case 23:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 15) + (((int)SegmentData[i_ + 1]) << 7) + (((int)SegmentData[i_ + 2]) >> 1);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 2]) & 1) << 22) + (((int)SegmentData[i_ + 3]) << 14) + (((int)SegmentData[i_ + 4]) << 6) + (((int)SegmentData[i_ + 5]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 5]) & 3) << 21) + (((int)SegmentData[i_ + 6]) << 13) + (((int)SegmentData[i_ + 7]) << 5) + (((int)SegmentData[i_ + 8]) >> 3);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 8]) & 7) << 20) + (((int)SegmentData[i_ + 9]) << 12) + (((int)SegmentData[i_ + 10]) << 4) + (((int)SegmentData[i_ + 11]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 11]) & 15) << 19) + (((int)SegmentData[i_ + 12]) << 11) + (((int)SegmentData[i_ + 13]) << 3) + (((int)SegmentData[i_ + 14]) >> 5);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 14]) & 31) << 18) + (((int)SegmentData[i_ + 15]) << 10) + (((int)SegmentData[i_ + 16]) << 2) + (((int)SegmentData[i_ + 17]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 17]) & 63) << 17) + (((int)SegmentData[i_ + 18]) << 9) + (((int)SegmentData[i_ + 19]) << 1) + (((int)SegmentData[i_ + 20]) >> 7);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 20]) & 127) << 16) + (((int)SegmentData[i_ + 21]) << 8) + ((int)SegmentData[i_ + 22]);
                            i_ += 23;
                        }
                    }
                    break;

                    case 24:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i++)
                        {
                            DataVals[i][DataPos] = ((((int)SegmentData[i_ + 0]) << 16) + (((int)SegmentData[i_ + 1]) << 8) + ((int)SegmentData[i_ + 2]));
                            i_ += 3;
                        }
                    }
                    break;

                    case 25:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 17) + (((int)SegmentData[i_ + 1]) << 9) + (((int)SegmentData[i_ + 2]) << 1) + (((int)SegmentData[i_ + 3]) >> 7);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 127) << 18) + (((int)SegmentData[i_ + 4]) << 10) + (((int)SegmentData[i_ + 5]) << 2) + (((int)SegmentData[i_ + 6]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 6]) & 63) << 19) + (((int)SegmentData[i_ + 7]) << 11) + (((int)SegmentData[i_ + 8]) << 3) + (((int)SegmentData[i_ + 9]) >> 5);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 9]) & 31) << 20) + (((int)SegmentData[i_ + 10]) << 12) + (((int)SegmentData[i_ + 11]) << 4) + (((int)SegmentData[i_ + 12]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 12]) & 15) << 21) + (((int)SegmentData[i_ + 13]) << 13) + (((int)SegmentData[i_ + 14]) << 5) + (((int)SegmentData[i_ + 15]) >> 3);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 15]) & 7) << 22) + (((int)SegmentData[i_ + 16]) << 14) + (((int)SegmentData[i_ + 17]) << 6) + (((int)SegmentData[i_ + 18]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 18]) & 3) << 23) + (((int)SegmentData[i_ + 19]) << 15) + (((int)SegmentData[i_ + 20]) << 7) + (((int)SegmentData[i_ + 21]) >> 1);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 21]) & 1) << 24) + (((int)SegmentData[i_ + 22]) << 16) + (((int)SegmentData[i_ + 23]) << 8) + ((int)SegmentData[i_ + 24]);
                            i_ += 25;
                        }
                    }
                    break;

                    case 26:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 18) + (((int)SegmentData[i_ + 1]) << 10) + (((int)SegmentData[i_ + 2]) << 2) + (((int)SegmentData[i_ + 3]) >> 6);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 63) << 20) + (((int)SegmentData[i_ + 4]) << 12) + (((int)SegmentData[i_ + 5]) << 4) + (((int)SegmentData[i_ + 6]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 6]) & 15) << 22) + (((int)SegmentData[i_ + 7]) << 14) + (((int)SegmentData[i_ + 8]) << 6) + (((int)SegmentData[i_ + 9]) >> 2);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 9]) & 3) << 24) + (((int)SegmentData[i_ + 10]) << 16) + (((int)SegmentData[i_ + 11]) << 8) + ((int)SegmentData[i_ + 12]);
                            i_ += 13;
                        }
                    }
                    break;

                    case 27:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 19) + (((int)SegmentData[i_ + 1]) << 11) + (((int)SegmentData[i_ + 2]) << 3) + (((int)SegmentData[i_ + 3]) >> 5);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 31) << 22) + (((int)SegmentData[i_ + 4]) << 14) + (((int)SegmentData[i_ + 5]) << 6) + (((int)SegmentData[i_ + 6]) >> 2);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 6]) & 3) << 25) + (((int)SegmentData[i_ + 7]) << 17) + (((int)SegmentData[i_ + 8]) << 9) + (((int)SegmentData[i_ + 9]) << 1) + (((int)SegmentData[i_ + 10]) >> 7);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 10]) & 127) << 20) + (((int)SegmentData[i_ + 11]) << 12) + (((int)SegmentData[i_ + 12]) << 4) + (((int)SegmentData[i_ + 13]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 13]) & 15) << 23) + (((int)SegmentData[i_ + 14]) << 15) + (((int)SegmentData[i_ + 15]) << 7) + (((int)SegmentData[i_ + 16]) >> 1);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 16]) & 1) << 26) + (((int)SegmentData[i_ + 17]) << 18) + (((int)SegmentData[i_ + 18]) << 10) + (((int)SegmentData[i_ + 19]) << 2) + (((int)SegmentData[i_ + 20]) >> 6);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 20]) & 63) << 21) + (((int)SegmentData[i_ + 21]) << 13) + (((int)SegmentData[i_ + 22]) << 5) + (((int)SegmentData[i_ + 23]) >> 3);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 23]) & 7) << 24) + (((int)SegmentData[i_ + 24]) << 16) + (((int)SegmentData[i_ + 25]) << 8) + ((int)SegmentData[i_ + 26]);
                            i_ += 27;
                        }
                    }
                    break;

                    case 28:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 2)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 20) + (((int)SegmentData[i_ + 1]) << 12) + (((int)SegmentData[i_ + 2]) << 4) + (((int)SegmentData[i_ + 3]) >> 4);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 15) << 24) + (((int)SegmentData[i_ + 4]) << 16) + (((int)SegmentData[i_ + 5]) << 8) + ((int)SegmentData[i_ + 6]);
                            i_ += 7;
                        }
                    }
                    break;

                    case 29:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 8)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 21) + (((int)SegmentData[i_ + 1]) << 13) + (((int)SegmentData[i_ + 2]) << 5) + (((int)SegmentData[i_ + 3]) >> 3);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 7) << 26) + (((int)SegmentData[i_ + 4]) << 18) + (((int)SegmentData[i_ + 5]) << 10) + (((int)SegmentData[i_ + 6]) << 2) + (((int)SegmentData[i_ + 7]) >> 6);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 7]) & 63) << 23) + (((int)SegmentData[i_ + 8]) << 15) + (((int)SegmentData[i_ + 9]) << 7) + (((int)SegmentData[i_ + 10]) >> 1);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 10]) & 1) << 28) + (((int)SegmentData[i_ + 11]) << 20) + (((int)SegmentData[i_ + 12]) << 12) + (((int)SegmentData[i_ + 13]) << 4) + (((int)SegmentData[i_ + 14]) >> 4);
                            DataVals[i + 4][DataPos] = ((((int)SegmentData[i_ + 14]) & 15) << 25) + (((int)SegmentData[i_ + 15]) << 17) + (((int)SegmentData[i_ + 16]) << 9) + (((int)SegmentData[i_ + 17]) << 1) + (((int)SegmentData[i_ + 18]) >> 7);
                            DataVals[i + 5][DataPos] = ((((int)SegmentData[i_ + 18]) & 127) << 22) + (((int)SegmentData[i_ + 19]) << 14) + (((int)SegmentData[i_ + 20]) << 6) + (((int)SegmentData[i_ + 21]) >> 2);
                            DataVals[i + 6][DataPos] = ((((int)SegmentData[i_ + 21]) & 3) << 27) + (((int)SegmentData[i_ + 22]) << 19) + (((int)SegmentData[i_ + 23]) << 11) + (((int)SegmentData[i_ + 24]) << 3) + (((int)SegmentData[i_ + 25]) >> 5);
                            DataVals[i + 7][DataPos] = ((((int)SegmentData[i_ + 25]) & 31) << 24) + (((int)SegmentData[i_ + 26]) << 16) + (((int)SegmentData[i_ + 27]) << 8) + ((int)SegmentData[i_ + 28]);
                            i_ += 29;
                        }
                    }
                    break;

                    case 30:
                    {
                        for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i += 4)
                        {
                            DataVals[i + 0][DataPos] = (((int)SegmentData[i_ + 0]) << 22) + (((int)SegmentData[i_ + 1]) << 14) + (((int)SegmentData[i_ + 2]) << 6) + (((int)SegmentData[i_ + 3]) >> 2);
                            DataVals[i + 1][DataPos] = ((((int)SegmentData[i_ + 3]) & 3) << 28) + (((int)SegmentData[i_ + 4]) << 20) + (((int)SegmentData[i_ + 5]) << 12) + (((int)SegmentData[i_ + 6]) << 4) + (((int)SegmentData[i_ + 7]) >> 4);
                            DataVals[i + 2][DataPos] = ((((int)SegmentData[i_ + 7]) & 15) << 26) + (((int)SegmentData[i_ + 8]) << 18) + (((int)SegmentData[i_ + 9]) << 10) + (((int)SegmentData[i_ + 10]) << 2) + (((int)SegmentData[i_ + 11]) >> 6);
                            DataVals[i + 3][DataPos] = ((((int)SegmentData[i_ + 11]) & 63) << 24) + (((int)SegmentData[i_ + 12]) << 16) + (((int)SegmentData[i_ + 13]) << 8) + ((int)SegmentData[i_ + 14]);
                            i_ += 15;
                        }
                    }
                    break;
                    }
                }
                else
                {
                    for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i++)
                    {
                        DataVals[i][DataPos] = 0;
                    }
                }
            }
            else
            {
                for (int i = DataOffset; i < DataValueSizeValuesDataOffset; i++)
                {
                    DataVals[i][DataPos] = 0;
                }
            }
        }