Definition at line 20 of file ImageArchiveFileFset.h. References GetIntFromChars(), Impala::Persistency::File::GetReadBuffer(), GetSegmentBuf(), ILOG_ERROR, mCompressed, mFileOffset, mFirstSegment, mIOBuffer, mSegmentId, mSegmentLength, Impala::Util::IOBuffer::Read(), Impala::Util::IOBuffer::SetPosition(), Impala::Util::IOBuffer::Size(), and Impala::Persistency::File::Valid(). 00021 { 00022 mIOBuffer = 0; 00023 mFirstSegment = 0; 00024 00025 if (!file.Valid()) 00026 { 00027 ILOG_ERROR("Invalid file"); 00028 return; 00029 } 00030 00031 mIOBuffer = file.GetReadBuffer(); 00032 if (!mIOBuffer) 00033 return; 00034 00035 int bufSize = mIOBuffer->Size(); 00036 int headerPos = bufSize - 16; 00037 char header[16]; 00038 mIOBuffer->SetPosition(headerPos); 00039 mIOBuffer->Read(header, 16); 00040 if ((header[0] != 'M') || (header[1] != 'A') || (header[2] != 'S') 00041 || (header[3] != 'S') || (header[8] != 'S') || (header[9] != 'T') 00042 || (header[10] != 'R') || (header[11] != 'E')) 00043 { 00044 ILOG_ERROR("no magic header"); 00045 } 00046 int nrEntries = GetIntFromChars(header, 4); 00047 int tabPos = bufSize - 16 - (12 * nrEntries); 00048 char* segmentTab = new char[12 * nrEntries]; 00049 mIOBuffer->SetPosition(tabPos); 00050 mIOBuffer->Read(segmentTab, 12 * nrEntries); 00051 00052 int offset = 0; 00053 for (int i=0 ; i<nrEntries ; i++) 00054 { 00055 int segId = GetIntFromChars(segmentTab, i*12); 00056 mSegmentId.push_back(segId); 00057 00058 int segLen = GetIntFromChars(segmentTab, i*12 + 4); 00059 mSegmentLength.push_back(segLen); 00060 00061 int compressed = GetIntFromChars(segmentTab, i*12 + 8); 00062 mCompressed.push_back(compressed); 00063 00064 mFileOffset.push_back(offset); 00065 offset += segLen - compressed; 00066 } 00067 00068 mFirstSegment = GetSegmentBuf(0); 00069 00070 delete segmentTab; 00071 }
Here is the call graph for this function:
|