SNAP Library , Developer Reference
2013-01-07 14:03:36
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <blobbs.h>
Public Member Functions | |
TMBlobBs (const TStr &BlobBsFNm, const TFAccess &_Access=faRdOnly, const int &_MxSegLen=-1) | |
~TMBlobBs () | |
TMBlobBs & | operator= (const TMBlobBs &) |
TStr | GetVersionStr () const |
TBlobPt | PutBlob (const PSIn &SIn) |
TBlobPt | PutBlob (const TBlobPt &BlobPt, const PSIn &SIn) |
PSIn | GetBlob (const TBlobPt &BlobPt) |
void | DelBlob (const TBlobPt &BlobPt) |
TBlobPt | GetFirstBlobPt () |
TBlobPt | FFirstBlobPt () |
bool | FNextBlobPt (TBlobPt &TrvBlobPt, TBlobPt &BlobPt, PSIn &BlobSIn) |
Static Public Member Functions | |
static PBlobBs | New (const TStr &BlobBsFNm, const TFAccess &Access=faRdOnly, const int &MxSegLen=-1) |
static bool | Exists (const TStr &BlobBsFNm) |
Private Member Functions | |
void | LoadMain (int &Segs) |
void | SaveMain () const |
Static Private Member Functions | |
static void | GetNrFPathFMid (const TStr &BlobBsFNm, TStr &NrFPath, TStr &NrFMid) |
static TStr | GetMainFNm (const TStr &NrFPath, const TStr &NrFMid) |
static TStr | GetSegFNm (const TStr &NrFPath, const TStr &NrFMid, const int &SegN) |
Private Attributes | |
TFAccess | Access |
int | MxSegLen |
TStr | NrFPath |
TStr | NrFMid |
TBlobBsV | SegV |
int | CurSegN |
TMBlobBs::TMBlobBs | ( | const TStr & | BlobBsFNm, |
const TFAccess & | _Access = faRdOnly , |
||
const int & | _MxSegLen = -1 |
||
) |
Definition at line 449 of file blobbs.cpp.
References Access, TVec< TVal >::Add(), TFile::DelWc(), TFile::Exists(), faCreate, Fail, faRdOnly, faRestore, faUpdate, forever, GetMainFNm(), GetNrFPathFMid(), GetSegFNm(), LoadMain(), TBlobBs::MxBlobFLen, MxSegLen, TGBlobBs::New(), New(), NrFMid, NrFPath, SaveMain(), and SegV.
Referenced by New().
: TBlobBs(), Access(_Access), MxSegLen(_MxSegLen), NrFPath(), NrFMid(), SegV(), CurSegN(0){ if (MxSegLen==-1){MxSegLen=MxBlobFLen;} GetNrFPathFMid(BlobBsFNm, NrFPath, NrFMid); switch (Access){ case faCreate:{ TFile::DelWc(BlobBsFNm+".*"); TStr SegFNm=GetSegFNm(NrFPath, NrFMid, 0); PBlobBs Seg=TGBlobBs::New(SegFNm, faCreate, MxSegLen); SegV.Add(Seg); SaveMain(); break;} case faUpdate: case faRdOnly:{ int Segs; LoadMain(Segs); for (int SegN=0; SegN<Segs; SegN++){ TStr SegFNm=GetSegFNm(NrFPath, NrFMid, SegN); SegV.Add(TGBlobBs::New(SegFNm, Access, MxSegLen)); } break;} case faRestore:{ // assume no segments int Segs=-1; // if main-file exists if (TFile::Exists(GetMainFNm(NrFPath, NrFMid))){ // load main file int _Segs; LoadMain(_Segs); // load segment-files which exist Segs=0; forever { // get segment file-name TStr SegFNm=GetSegFNm(NrFPath, NrFMid, Segs); // if segment-file exists then add segment else break check-loop if (TFile::Exists(SegFNm)){ SegV.Add(TGBlobBs::New(SegFNm, Access, MxSegLen)); Segs++; } else { break; } } } // if no segments exist then create blob-base from scratch if (Segs==-1){ TStr SegFNm=GetSegFNm(NrFPath, NrFMid, 0); PBlobBs Seg=TGBlobBs::New(SegFNm, faCreate, MxSegLen); SegV.Add(Seg); SaveMain(); } break;} default: Fail; } }
Definition at line 503 of file blobbs.cpp.
References Access, faRdOnly, and SaveMain().
void TMBlobBs::DelBlob | ( | const TBlobPt & | BlobPt | ) | [virtual] |
Implements TBlobBs.
Definition at line 546 of file blobbs.cpp.
References TBlobPt::GetSeg(), and SegV.
bool TMBlobBs::Exists | ( | const TStr & | BlobBsFNm | ) | [static] |
Definition at line 576 of file blobbs.cpp.
References GetMainFNm(), GetNrFPathFMid(), NrFMid, and NrFPath.
{ TStr NrFPath; TStr NrFMid; GetNrFPathFMid(BlobBsFNm, NrFPath, NrFMid); TStr MainFNm=GetMainFNm(NrFPath, NrFMid); return TFile::Exists(MainFNm); }
TBlobPt TMBlobBs::FFirstBlobPt | ( | ) | [virtual] |
Implements TBlobBs.
Definition at line 555 of file blobbs.cpp.
References SegV.
{ return SegV[0]->FFirstBlobPt(); }
bool TMBlobBs::FNextBlobPt | ( | TBlobPt & | TrvBlobPt, |
TBlobPt & | BlobPt, | ||
PSIn & | BlobSIn | ||
) | [virtual] |
Implements TBlobBs.
Definition at line 559 of file blobbs.cpp.
References TBlobPt::GetSeg(), TVec< TVal >::Len(), TBlobPt::PutSeg(), and SegV.
{ uchar SegN=TrvBlobPt.GetSeg(); if (SegV[SegN]->FNextBlobPt(TrvBlobPt, BlobPt, BlobSIn)){ TrvBlobPt.PutSeg(SegN); BlobPt.PutSeg(SegN); return true; } else if (SegN==SegV.Len()-1){ return false; } else { SegN++; TrvBlobPt=SegV[SegN]->FFirstBlobPt(); TrvBlobPt.PutSeg(SegN); return FNextBlobPt(TrvBlobPt, BlobPt, BlobSIn); } }
PSIn TMBlobBs::GetBlob | ( | const TBlobPt & | BlobPt | ) | [virtual] |
Implements TBlobBs.
Definition at line 541 of file blobbs.cpp.
References TBlobPt::GetSeg(), and SegV.
TBlobPt TMBlobBs::GetFirstBlobPt | ( | ) | [virtual] |
Implements TBlobBs.
Definition at line 551 of file blobbs.cpp.
References SegV.
{ return SegV[0]->GetFirstBlobPt(); }
TStr TMBlobBs::GetMainFNm | ( | const TStr & | NrFPath, |
const TStr & | NrFMid | ||
) | [static, private] |
Definition at line 423 of file blobbs.cpp.
Referenced by Exists(), LoadMain(), SaveMain(), and TMBlobBs().
{ return NrFPath+NrFMid+".mbb"; }
void TMBlobBs::GetNrFPathFMid | ( | const TStr & | BlobBsFNm, |
TStr & | NrFPath, | ||
TStr & | NrFMid | ||
) | [static, private] |
Definition at line 417 of file blobbs.cpp.
References TStr::GetFMid(), TStr::GetFPath(), TStr::GetNrFMid(), and TStr::GetNrFPath().
Referenced by Exists(), and TMBlobBs().
{ NrFPath=TStr::GetNrFPath(BlobBsFNm.GetFPath()); NrFMid=TStr::GetNrFMid(BlobBsFNm.GetFMid()); }
TStr TMBlobBs::GetSegFNm | ( | const TStr & | NrFPath, |
const TStr & | NrFMid, | ||
const int & | SegN | ||
) | [static, private] |
Definition at line 428 of file blobbs.cpp.
References TStr::GetNrNumFExt().
Referenced by PutBlob(), and TMBlobBs().
{ return NrFPath+NrFMid+".mbb"+""+TStr::GetNrNumFExt(SegN); }
TStr TMBlobBs::GetVersionStr | ( | ) | const [inline, virtual] |
Implements TBlobBs.
Definition at line 210 of file blobbs.h.
Referenced by LoadMain(), and SaveMain().
{ return TStr("Multiple-File Blob Base Format 1.0");}
void TMBlobBs::LoadMain | ( | int & | Segs | ) | [private] |
Definition at line 433 of file blobbs.cpp.
References EAssert, GetMainFNm(), TILx::GetVarInt(), TILx::GetVarStr(), GetVersionStr(), MxSegLen, New(), NrFMid, NrFPath, oloCsSens, oloFrcEoln, and oloSigNum.
Referenced by TMBlobBs().
{ PSIn SIn=TFIn::New(GetMainFNm(NrFPath, NrFMid)); TILx Lx(SIn, TFSet()|oloFrcEoln|oloSigNum|oloCsSens); EAssert(Lx.GetVarStr("Version")==GetVersionStr()); MxSegLen=Lx.GetVarInt("MxSegLen"); Segs=Lx.GetVarInt("Segments"); }
static PBlobBs TMBlobBs::New | ( | const TStr & | BlobBsFNm, |
const TFAccess & | Access = faRdOnly , |
||
const int & | MxSegLen = -1 |
||
) | [inline, static] |
Definition at line 203 of file blobbs.h.
References Access, MxSegLen, and TMBlobBs().
Referenced by LoadMain(), PutBlob(), SaveMain(), and TMBlobBs().
TBlobPt TMBlobBs::PutBlob | ( | const PSIn & | SIn | ) | [virtual] |
Implements TBlobBs.
Definition at line 509 of file blobbs.cpp.
References Access, TVec< TVal >::Add(), CurSegN, EAssert, TBlobPt::Empty(), faCreate, faRestore, faUpdate, GetSegFNm(), TVec< TVal >::Len(), MxSegLen, New(), NrFMid, NrFPath, TBlobPt::PutSeg(), and SegV.
Referenced by PutBlob().
{ EAssert((Access==faCreate)||(Access==faUpdate)||(Access==faRestore)); TBlobPt BlobPt=SegV[CurSegN]->PutBlob(SIn); if (BlobPt.Empty()){ for (uchar SegN=0; SegN<SegV.Len(); SegN++){ BlobPt=SegV[CurSegN=SegN]->PutBlob(SIn); if (!BlobPt.Empty()){break;} } if (BlobPt.Empty()){ TStr SegFNm=GetSegFNm(NrFPath, NrFMid, SegV.Len()); PBlobBs Seg=TGBlobBs::New(SegFNm, faCreate, MxSegLen); CurSegN=SegV.Add(Seg); EAssert(CurSegN<=255); BlobPt=SegV[CurSegN]->PutBlob(SIn); } } if (!BlobPt.Empty()){ BlobPt.PutSeg(uchar(CurSegN));} return BlobPt; }
TBlobPt TMBlobBs::PutBlob | ( | const TBlobPt & | BlobPt, |
const PSIn & | SIn | ||
) | [virtual] |
Implements TBlobBs.
Definition at line 529 of file blobbs.cpp.
References Access, EAssert, TBlobPt::Empty(), faCreate, faRestore, faUpdate, TBlobPt::GetSeg(), PutBlob(), TBlobPt::PutSeg(), and SegV.
{ EAssert((Access==faCreate)||(Access==faUpdate)||(Access==faRestore)); int SegN=BlobPt.GetSeg(); TBlobPt NewBlobPt=SegV[SegN]->PutBlob(BlobPt, SIn); if (NewBlobPt.Empty()){ NewBlobPt=PutBlob(SIn); } else { NewBlobPt.PutSeg(BlobPt.GetSeg()); } return NewBlobPt; }
void TMBlobBs::SaveMain | ( | ) | const [private] |
Definition at line 441 of file blobbs.cpp.
References GetMainFNm(), GetVersionStr(), TVec< TVal >::Len(), MxSegLen, New(), NrFMid, NrFPath, oloCsSens, oloFrcEoln, oloSigNum, TOLx::PutVarInt(), TOLx::PutVarStr(), and SegV.
Referenced by TMBlobBs(), and ~TMBlobBs().
{ PSOut SOut=TFOut::New(GetMainFNm(NrFPath, NrFMid)); TOLx Lx(SOut, TFSet()|oloFrcEoln|oloSigNum|oloCsSens); Lx.PutVarStr("Version", GetVersionStr()); Lx.PutVarInt("MxSegLen", MxSegLen); Lx.PutVarInt("Segments", SegV.Len()); }
TFAccess TMBlobBs::Access [private] |
Definition at line 190 of file blobbs.h.
Referenced by New(), PutBlob(), TMBlobBs(), and ~TMBlobBs().
int TMBlobBs::CurSegN [private] |
int TMBlobBs::MxSegLen [private] |
Definition at line 191 of file blobbs.h.
Referenced by LoadMain(), New(), PutBlob(), SaveMain(), and TMBlobBs().
TStr TMBlobBs::NrFMid [private] |
Definition at line 192 of file blobbs.h.
Referenced by Exists(), LoadMain(), PutBlob(), SaveMain(), and TMBlobBs().
TStr TMBlobBs::NrFPath [private] |
Definition at line 192 of file blobbs.h.
Referenced by Exists(), LoadMain(), PutBlob(), SaveMain(), and TMBlobBs().
TBlobBsV TMBlobBs::SegV [private] |
Definition at line 193 of file blobbs.h.
Referenced by DelBlob(), FFirstBlobPt(), FNextBlobPt(), GetBlob(), GetFirstBlobPt(), PutBlob(), SaveMain(), and TMBlobBs().