Exemplo n.º 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);
 }
Exemplo n.º 2
0
        public void DataValueSet(int SegmentNo, ref int[][] DataVals, int DataOffset, int DataPos)
        {
            int DataValueSizeValuesDataOffset = (int)DataValueSizeValues + DataOffset;

            if ((!IsDummyFile) && (ParamDataFile != null))
            {
                long SegmentOffset = SegmentNo;
                if (ParamDigestMode)
                {
                    throw new Exception("Data value cannot be written to digest file");
                }
                else
                {
                    Monitor.Enter(DataF_);
                    SegmentOffset = SegmentOffset * SegmentSize + DataValueByteOffset;
                    long SegmentSize_ = Math.Min(DataValueSizeBytes, ParamValueFStream.Length - SegmentOffset);
                    if (SegmentSize_ > 0)
                    {
                        byte[] SegmentData = new byte[DataValueSizeBytes];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                        ParamValueFStream.Seek(SegmentOffset, SeekOrigin.Begin);
                        ParamValueFStream.Write(SegmentData, 0, (int)SegmentSize_);
                    }
                    Monitor.Exit(DataF_);
                }
            }
        }
Exemplo n.º 3
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;
                }
            }
        }