#include <fsc_nsStream.h>


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_LimitedStream * | m_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 |
| 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 };
| 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 };


| 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 }

| 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 }


| 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 }


| 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 };

| 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().

Reimplemented from fio_Vector.
Reimplemented in fsc_nsAttrStream.
Definition at line 85 of file fsc_nsStream.h.
int fsc_nsStream::m_recSize [protected] |
Definition at line 92 of file fsc_nsStream.h.
Referenced by NumOfRecords(), ReadFromDB(), fsc_nsAttrStream::ReadSplitsFromDB(), and Write2DB().
unsigned int fsc_nsStream::m_maxStreamSize [private] |
Definition at line 96 of file fsc_nsStream.h.
Referenced by ReadFromDB(), RemoveLeftVectors(), and Write2DB().
df_LimitedStream* fsc_nsStream::m_firstStream_p [protected] |
Definition at line 98 of file fsc_nsStream.h.
Referenced by fsc_nsAttrStream::Dump(), SetLimitedStream(), Write2DB(), and ~fsc_nsStream().
1.5.6