Definition at line 172 of file VirtualMatrixIOBufferReader.h.
References Impala::Util::IOBuffer::cBzipBlockSize, Impala::Util::IOBuffer::GetPosition(), ILOG_ERROR, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mBaseOffset, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mBinary, 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 >::mElemSize, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mHeight, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mIOBuffer, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mLinesPerChunk, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mLinesPerCompressedBlock, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mNrA, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mOwnBuffer, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mVersion, Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::mWidth, Impala::Util::IOBuffer::SetPosition(), and Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::SwitchToChunk().
Referenced by Impala::Core::Matrix::VirtualMatrixIOBufferReader< ArrayT >::VirtualMatrixIOBufferReader().
00173 {
00174 mIOBuffer = buffer;
00175 mOwnBuffer = ownBuffer;
00176 mBaseOffset = buffer->GetPosition();
00177 mChunkOffsets = 0;
00178 mChunkBuffer = 0;
00179 if (! Array::ReadRawHeader<ArrayT>
00180 (mIOBuffer, &mVersion, &mBinary, &mElemSize, &mWidth, &mHeight,
00181 &mNrA, mCompressor, &mLinesPerCompressedBlock))
00182 {
00183 ILOG_ERROR("Could not parse header");
00184 return;
00185 }
00186 if (!mBinary)
00187 {
00188 ILOG_ERROR("Only binary files are supported");
00189 }
00190 if (mElemSize != 1)
00191 {
00192 ILOG_ERROR("IOBuffer does not contain a Matrix");
00193 }
00194
00195 Int64 lineSize = sizeof(StorT) * mWidth;
00196 buffer->SetPosition(mBaseOffset + 200);
00197 if (mLinesPerCompressedBlock > 0)
00198 {
00199 mLinesPerChunk = mLinesPerCompressedBlock;
00200 }
00201 else
00202 {
00203
00204 mLinesPerChunk = Util::IOBuffer::cBzipBlockSize / lineSize;
00205 }
00206 mChunkCount = mHeight / mLinesPerChunk;
00207 if (mHeight % mLinesPerChunk != 0)
00208 mChunkCount++;
00209 mChunkSize = lineSize * mLinesPerChunk;
00210 mChunkOffsets = new Int64[mChunkCount+1];
00211 mChunkOffsets[0] = mBaseOffset + 200;
00212 for (Int64 i=1 ; i<mChunkCount+1 ; i++)
00213 {
00214 if (mLinesPerCompressedBlock == 0)
00215 {
00216 mChunkOffsets[i] = mChunkOffsets[i-1] + mChunkSize;
00217 }
00218 else
00219 {
00220 mChunkOffsets[i] = -1;
00221 }
00222 }
00223
00224 mChunkBuffer = new StorT[mWidth * mLinesPerChunk];
00225 mChunkBufferWrapper = new ArrayT(mWidth * mLinesPerChunk, 1, 0, 0,
00226 mChunkBuffer, true);
00227 mCurrentChunk = -1;
00228 SwitchToChunk(0);
00229 }
Here is the call graph for this function: