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

Impala::Core::Array::ImageArchiveFileFset::ImageArchiveFileFset ( Persistency::File  file  )  [inline]

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:


Generated on Fri Mar 19 10:59:32 2010 for ImpalaSrc by  doxygen 1.5.1