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

VirtualFeatureTableIOBufferReader.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Feature_VirtualFeatureTableIOBufferReader_h
00002 #define Impala_Core_Feature_VirtualFeatureTableIOBufferReader_h
00003 
00004 #include "Core/Feature/VirtualFeatureTable.h"
00005 #include "Core/Matrix/VirtualMatrixIOBufferReader.h"
00006 #include "Core/Column/Read.h"
00007 
00008 namespace Impala
00009 {
00010 namespace Core
00011 {
00012 namespace Feature
00013 {
00014 
00015 
00016 class VirtualFeatureTableIOBufferReader : public VirtualFeatureTable
00017 {
00018 public:
00019 
00020     VirtualFeatureTableIOBufferReader(Util::IOBuffer* buffer, bool ownBuffer)
00021     {
00022         Init(buffer, ownBuffer);
00023     }
00024 
00025     virtual
00026     ~VirtualFeatureTableIOBufferReader()
00027     {
00028         delete mMatrix;
00029         mMatrix = 0;
00030         if (mOwnBuffer)
00031         {
00032             delete mIOBuffer;
00033             mIOBuffer = 0;
00034         }
00035     }
00036 
00037     virtual int
00038     Size() const
00039     {
00040         return mSize;
00041     }
00042 
00043     virtual void
00044     GetQuids(Table::QuidTable* quids)
00045     {
00046         mIOBuffer->SetPosition(mBaseOffset + mQuidsOffset);
00047         Column::Read(quids->GetColumn1(), mIOBuffer);
00048         quids->SetSize(Size());
00049     }
00050 
00051     virtual int
00052     GetVectorLength() const
00053     {
00054         return mVectorLength;
00055     }
00056 
00057 private:
00058 
00059     virtual int
00060     GetVectorImpl(int rowNr, Real64* buffer, int bufferSize)
00061     {
00062         return mMatrix->GetRow(rowNr, buffer, bufferSize);
00063     }
00064 
00065     void
00066     Init(Util::IOBuffer* buffer, bool ownBuffer)
00067     {
00068         mIOBuffer = buffer;
00069         mOwnBuffer = ownBuffer;
00070         mBaseOffset = buffer->GetPosition();
00071 
00072         mIOBuffer->SetPosition(mBaseOffset + 1024);
00073         Int64 footer[16];
00074         Int64 nRead = mIOBuffer->Read(footer, sizeof(Int64) * 16);
00075         mSize = footer[3];
00076         mQuidsOffset = footer[4];
00077         mIOBuffer->SetPosition(mBaseOffset + footer[5]);
00078         mMatrix = new Core::Matrix::VirtualMatrixIOBufferReader<Matrix::Mat>
00079                                                              (mIOBuffer, false);
00080         mVectorLength = mMatrix->NrCol();
00081     }
00082 
00083     Util::IOBuffer*        mIOBuffer;
00084     bool                   mOwnBuffer;
00085     Int64                  mBaseOffset;
00086     Int64                  mQuidsOffset;
00087     Int64                  mSize;
00088     Int64                  mVectorLength;
00089     Matrix::VirtualMatrix* mMatrix;
00090 
00091     ILOG_VAR_DEC;
00092 };
00093 
00094 ILOG_VAR_INIT(VirtualFeatureTableIOBufferReader, Impala.Core.Feature);
00095 
00096 } // namespace Feature
00097 } // namespace Core
00098 } // namespace Impala
00099 
00100 #endif

Generated on Thu Jan 13 09:04:26 2011 for ImpalaSrc by  doxygen 1.5.1