fsc_nsStream Class Reference
[G_new_group]

#include <fsc_nsStream.h>

Inheritance diagram for fsc_nsStream:

Inheritance graph
[legend]
Collaboration diagram for fsc_nsStream:

Collaboration graph
[legend]

List of all members.


Detailed Description

is a fio_Vector take care of DB vectors in chain.

When stream is to large for one vector then df_LimitedStream member helps manage it just to store data from vectors. But all DB works is done by itself. It reads all data from DB and writes it back.

Definition at line 38 of file fsc_nsStream.h.


Public Member Functions

 fsc_nsStream (fio_RelFileTrans &a_relFile, UInt8_t a_size, ivd_RecordIDX_t a_idx)
 ~fsc_nsStream (void)
bool Write2DB (fio_VecQualifers &a_vq, fio_Transaction &a_trans)
void ReadFromDB (df_Stream &a_attrStream)
void SetLimitedStream (df_LimitedStream *a_firstStream_p)

Public Attributes

 log_CLASSID_m

Protected Attributes

int m_recSize
df_LimitedStreamm_firstStream_p

Private Member Functions

bool Write2DB (df_LimitedStream *a_limStream_p, fio_VecQualifers &a_vq, fio_Transaction &a_trans)
void RemoveLeftVectors (fio_VecQualifers &a_vq, fio_Transaction &a_trans)
int NumOfRecords (int a_size)
 nuumber of records need for a_size buffer length

Private Attributes

unsigned int m_maxStreamSize

Constructor & Destructor Documentation

fsc_nsStream::fsc_nsStream ( fio_RelFileTrans a_relFile,
UInt8_t  a_size,
ivd_RecordIDX_t  a_idx 
) [inline]

Definition at line 40 of file fsc_nsStream.h.

00043         :
00044         fio_Vector(a_relFile,
00045                    (a_idx > 0 && a_size == 0)
00046                    ? c_fio_numOfDifVector
00047                    : a_size, 
00048                    a_idx),
00049         m_recSize(a_relFile.GetRecordSize()),
00050         m_maxStreamSize(ivd_MAX_STREAM_SIZE(m_recSize)),
00051         m_firstStream_p(NULL)
00052     { };

fsc_nsStream::~fsc_nsStream ( void   )  [inline]

Definition at line 54 of file fsc_nsStream.h.

References m_firstStream_p.

00054                         {
00055         if (m_firstStream_p) {
00056             delete m_firstStream_p;
00057         }
00058     };


Member Function Documentation

bool fsc_nsStream::Write2DB ( fio_VecQualifers a_vq,
fio_Transaction a_trans 
) [inline]

Definition at line 60 of file fsc_nsStream.h.

References m_firstStream_p, NULL, and RemoveLeftVectors().

Referenced by Write2DB(), and fsc_nsAttrMgr::Write2DB().

00061                                               {
00062         if (m_firstStream_p == NULL) {
00063             RemoveLeftVectors(a_vq, a_trans);
00064             return true;
00065         }
00066         return Write2DB(m_firstStream_p, a_vq, a_trans);
00067     };

Here is the call graph for this function:

Here is the caller graph for this function:

bool fsc_nsStream::Write2DB ( df_LimitedStream a_limStream_p,
fio_VecQualifers a_vq,
fio_Transaction a_trans 
) [private]

Definition at line 38 of file fsc_nsStream.cpp.

References c_fio_numOfDifVector, c_zroesString(), dbg_DETAIL, df_LimitedStream::GetLimStreamBufRef(), df_LimitedStream::GetNextLimStream(), fio_VecQualifers::idx, fio_RelFile::Idx2Pos(), log_DBG_m, log_FUNC_m, fio_Vector::m_changed, m_maxStreamSize, m_recSize, fio_Vector::m_relFileTrans, NULL, NumOfRecords(), fio_File::PosRead(), RemoveLeftVectors(), fio_Vector::SetVector(), fio_VecQualifers::size, fio_Vector::Write2DB(), and Write2DB().

00040                                                         {
00041     if (a_limStream_p == NULL) {
00042         log_FUNC_m(Write2DB);
00043         log_DBG_m(dbg_DETAIL, "No more chained limStreams.");
00044         RemoveLeftVectors(a_vq, a_trans);
00045         return true;
00046     }
00047 
00048     //log_DBG_m(dbg_DETAIL, "vector qualifers of attrib stream. idx " 
00049     //                    << a_vq.idx << " size " << a_vq.size);
00050     fio_VecQualifers vq; // next vector qualifers
00051     if (a_vq.idx > 0) { // previous data was written to a_vq.idx location        
00052         if (a_vq.size == c_fio_numOfDifVector) {
00053             // get next vector size and index
00054             m_relFileTrans.PosRead(m_relFileTrans.Idx2Pos(a_vq.idx)
00055                                    + m_maxStreamSize, &vq, sizeof(vq));
00056         }
00057     }
00058 
00059     if (a_limStream_p->GetNextLimStream()) { // recursion
00060 //        log_DBG_m(dbg_DETAIL, "Got next lim stream.");
00061         Write2DB(a_limStream_p->GetNextLimStream(), vq, a_trans);
00062     }
00063     else { // no
00064     }
00065 
00066     SetVector(a_vq);
00067 
00068     string &limStream = a_limStream_p->GetLimStreamBufRef();
00069     unsigned int streamSize = limStream.size();
00070     ivd_VectorSize_t vecSize = NumOfRecords(streamSize);
00071     //log_DBG_m(dbg_DETAIL, "Current stream size " << streamSize
00072     //                   << " this is " << vecSize 
00073     //                   << " vector elements of size " << m_recSize );
00074     if (vecSize == c_fio_numOfDifVector) {
00075         if (streamSize < vecSize * m_recSize - sizeof(vq)) {
00076             // fill zeroes to rest of the last record
00077             limStream.append(c_zroesString.data(), vecSize * m_recSize - sizeof(vq) - streamSize);
00078         }
00079         limStream.append((char*)&vq, sizeof(vq)); // append size and idx of next vector
00080     }
00081     else if (streamSize < (unsigned int)vecSize * m_recSize) {
00082         // fill zeroes to rest of the last record
00083         limStream.append(c_zroesString.data(), vecSize * m_recSize - streamSize);
00084     }
00085 
00086 //    log_DBG_m(dbg_DETAIL, "Write2DB");
00087     m_changed = true;
00088     a_vq.size = vecSize;
00089     return fio_Vector::Write2DB(limStream.data(), a_vq.size, a_vq.idx, a_trans);
00090 }

Here is the call graph for this function:

void fsc_nsStream::RemoveLeftVectors ( fio_VecQualifers a_vq,
fio_Transaction a_trans 
) [private]

Definition at line 93 of file fsc_nsStream.cpp.

References c_fio_numOfDifVector, dbg_DETAIL, fio_VecQualifers::idx, fio_RelFile::Idx2Pos(), log_DBG_m, log_FUNC_m, m_maxStreamSize, fio_Vector::m_relFileTrans, fio_File::PosRead(), fio_RelFileTrans::ReleaseVectorIdx(), and fio_VecQualifers::size.

Referenced by Write2DB().

00094                                                                  {
00095     log_FUNC_m(RemoveLeftVectors);
00096     log_DBG_m(dbg_DETAIL, "a_vq.idx = " << a_vq.idx
00097                         << ", a_vq.size = " << a_vq.size);
00098     if (a_vq.idx > 0) { // previous data was written to a_vq.idx location
00099         if (a_vq.size == c_fio_numOfDifVector) {
00100             fio_VecQualifers vq; // next vector qualifers
00101             // get next vector size and index
00102             m_relFileTrans.PosRead(m_relFileTrans.Idx2Pos(a_vq.idx)
00103                                    + m_maxStreamSize, &vq, sizeof(vq));
00104             RemoveLeftVectors(vq, a_trans);
00105         }
00106         m_relFileTrans.ReleaseVectorIdx(a_vq.idx, a_vq.size, &a_trans);
00107         a_vq.size = 0;        
00108         a_vq.idx = 0;
00109     }
00110 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_nsStream::ReadFromDB ( df_Stream a_attrStream  ) 

Definition at line 113 of file fsc_nsStream.cpp.

References c_fio_numOfDifVector, dbg_DETAIL, fio_Vector::GetVectorIndex(), fio_Vector::GetVectorSize(), log_DBG_m, log_FUNC_m, m_maxStreamSize, m_recSize, fio_Vector::ReadFromDB(), fio_Vector::SetVector(), and df_Stream::Write().

Referenced by fsc_nsAttrStream::ReadSplitsFromDB().

00113                                                      {
00114     log_FUNC_m(ReadFromDB);
00115     // same vector is used to read all limStreams
00116     fio_VecQualifers origVQ(GetVectorSize(), GetVectorIndex());
00117 
00118     while (GetVectorIndex() > 0) {        
00119         string limStream;
00120         ivd_VectorSize_t vecSize = GetVectorSize();
00121         log_DBG_m(dbg_DETAIL, " get attribute stream from idx " << GetVectorIndex()
00122                             << " size " << vecSize
00123                             << ", m_recSize" << m_recSize);
00124         // NOTE! Dirty solution, string doesn't now about filled data.
00125         limStream.resize(vecSize * m_recSize); // prepare enought place for data
00126         fio_Vector::ReadFromDB((void*)const_cast<char*>(limStream.data()));
00127         if (vecSize == c_fio_numOfDifVector) { // vector is full posible exits another 
00128             log_DBG_m(dbg_DETAIL, " Vector is full. Maybe exist another one." );
00129             const fio_VecQualifers &vq = *reinterpret_cast<const fio_VecQualifers*>(
00130                                         limStream.data() + m_maxStreamSize);
00131             SetVector(vq);
00132             // cut off vec qualifer from the end of the lim-stream
00133             limStream.resize(m_maxStreamSize);
00134             a_attrStream.Write(limStream);            // add string as limString to a_attrStream
00135         } 
00136         else {
00137             a_attrStream.Write(limStream);
00138             break;
00139         }
00140     }        
00141 //    SetLimitedStream(a_attrStream.StealFirstStream());
00142     SetVector(origVQ);
00143 }

Here is the call graph for this function:

Here is the caller graph for this function:

void fsc_nsStream::SetLimitedStream ( df_LimitedStream a_firstStream_p  )  [inline]

Definition at line 80 of file fsc_nsStream.h.

References m_firstStream_p, and NULL.

Referenced by fsc_nsAttrMgr::ChgAttributes(), and fsc_nsAttrMgr::RemoveAttributes().

00080                                                                {
00081         if (m_firstStream_p != NULL) {
00082             delete m_firstStream_p;
00083         }
00084         m_firstStream_p = a_firstStream_p;
00085     };

Here is the caller graph for this function:

int fsc_nsStream::NumOfRecords ( int  a_size  )  [inline, private]

nuumber of records need for a_size buffer length

Definition at line 90 of file fsc_nsStream.h.

References m_recSize.

Referenced by Write2DB().

00090                                  {
00091         return ((a_size + m_recSize - 1) / m_recSize);
00092     };

Here is the caller graph for this function:


Member Data Documentation

Reimplemented from fio_Vector.

Reimplemented in fsc_nsAttrStream.

Definition at line 85 of file fsc_nsStream.h.

int fsc_nsStream::m_recSize [protected]

unsigned int fsc_nsStream::m_maxStreamSize [private]

Definition at line 96 of file fsc_nsStream.h.

Referenced by ReadFromDB(), RemoveLeftVectors(), and Write2DB().

Definition at line 98 of file fsc_nsStream.h.

Referenced by fsc_nsAttrStream::Dump(), SetLimitedStream(), Write2DB(), and ~fsc_nsStream().


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:23:51 2012 for OPENARCHIVE by  doxygen 1.5.6