Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

template<class ArrayT>
void Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::SwitchToChunk ( Int64  chunkNo  )  [inline, private]

Definition at line 117 of file VirtualMatrixIOBufferReader.h.

References Impala::Core::Array::Endian(), Impala::Util::IOBuffer::GetPosition(), ILOG_ERROR, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mChunkBuffer, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mChunkBufferWrapper, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mChunkCount, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mChunkOffsets, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mChunkSize, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mCompressor, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mCurrentChunk, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mIOBuffer, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mLinesPerChunk, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mLinesPerCompressedBlock, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mWidth, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::NrRow(), Impala::Util::IOBuffer::Read(), Impala::Util::IOBuffer::ReadBzip(), Impala::Util::IOBuffer::ReadZlib(), and Impala::Util::IOBuffer::SetPosition().

Referenced by Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::Init(), and Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::SwitchToRow().

00118     {
00119         if (mCurrentChunk == chunkNo)
00120             return;
00121         if (chunkNo >= mChunkCount)
00122         {
00123             ILOG_ERROR("Invalid chunkNo " << chunkNo << " " << mChunkCount);
00124             return;
00125         }
00126         Int64 nrBytes = mChunkSize;
00127         if (chunkNo == mChunkCount - 1)
00128         {
00129             // last chunk might be smaller
00130             Int64 linesLeft = NrRow() - mLinesPerChunk * chunkNo;
00131             nrBytes = linesLeft * sizeof(StorT) * mWidth;
00132         }
00133         if (mLinesPerCompressedBlock)
00134         {
00135             if (mChunkOffsets[chunkNo] == -1)
00136             {
00137                 for (Int64 i=1 ; i<chunkNo ; i++)
00138                 {
00139                     if (mChunkOffsets[i] == -1)
00140                     {
00141                         SwitchToChunk(i-1);
00142                     }
00143                 }
00144             }
00145             mIOBuffer->SetPosition(mChunkOffsets[chunkNo]);
00146             Int64 nrRead = 0;
00147             if (mCompressor == "zlib")
00148                 nrRead = mIOBuffer->ReadZlib(mChunkBuffer, nrBytes);
00149             if (mCompressor == "bzip")
00150                 nrRead = mIOBuffer->ReadBzip(mChunkBuffer, nrBytes);
00151             if (nrRead != nrBytes)
00152             {
00153                 ILOG_ERROR("readCompressed " << nrRead << " bytes instead of "
00154                             << nrBytes);
00155             }
00156             mChunkOffsets[chunkNo + 1] = mIOBuffer->GetPosition();
00157         }
00158         else
00159         {
00160             mIOBuffer->SetPosition(mChunkOffsets[chunkNo]);
00161             Int64 nrRead = mIOBuffer->Read(mChunkBuffer, nrBytes);
00162             if (nrRead != nrBytes)
00163             {
00164                 ILOG_ERROR("read " << nrRead << " bytes instead of " << nrBytes);
00165             }
00166         }
00167         Array::Endian(mChunkBufferWrapper, mChunkBufferWrapper);
00168         mCurrentChunk = chunkNo;
00169     }

Here is the call graph for this function:


Generated on Thu Jan 13 09:20:23 2011 for ImpalaSrc by  doxygen 1.5.1