| 
    SNAP Library 2.0, Developer Reference
    2013-05-13 16:33:57
    
   SNAP, a general purpose, high performance system for analysis and manipulation of large networks 
   | 
  
  
  
 
#include <blobbs.h>


Public Member Functions | |
| TGBlobBs (const TStr &BlobBsFNm, const TFAccess &_Access=faRdOnly, const int &_MxSegLen=-1) | |
| ~TGBlobBs () | |
| TGBlobBs & | operator= (const TGBlobBs &) | 
| 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) | 
Static Private Member Functions | |
| static TStr | GetNrBlobBsFNm (const TStr &BlobBsFNm) | 
Private Attributes | |
| PFRnd | FBlobBs | 
| TFAccess | Access | 
| int | MxSegLen | 
| TIntV | BlockLenV | 
| TBlobPtV | FFreeBlobPtV | 
| TBlobPt | FirstBlobPt | 
| TGBlobBs::TGBlobBs | ( | const TStr & | BlobBsFNm, | 
| const TFAccess & | _Access = faRdOnly,  | 
        ||
| const int & | _MxSegLen = -1  | 
        ||
| ) | 
Definition at line 220 of file blobbs.cpp.
References Access, TBlobBs::AssertBlobBsStateStr(), TBlobBs::AssertVersionStr(), bbsClosed, bbsOpened, BlockLenV, TFRnd::Empty(), faCreate, Fail, faRdOnly, faRestore, faUpdate, FBlobBs, FFreeBlobPtV, FirstBlobPt, TFRnd::Flush(), TBlobBs::GenBlockLenV(), TBlobBs::GenFFreeBlobPtV(), TBlobBs::GetBlockLenV(), TBlobBs::GetFFreeBlobPtV(), TFRnd::GetFPos(), TBlobBs::GetMxSegLen(), GetNrBlobBsFNm(), TBlobBs::MxBlobFLen, MxSegLen, New(), TBlobBs::PutBlobBsStateStr(), TBlobBs::PutBlockLenV(), TBlobBs::PutFFreeBlobPtV(), TBlobBs::PutMxSegLen(), TBlobBs::PutVersionStr(), and TFRnd::SetFPos().
Referenced by New().
: TBlobBs(), FBlobBs(), Access(_Access), MxSegLen(_MxSegLen), BlockLenV(), FFreeBlobPtV(TB4Def::B4Bits), FirstBlobPt(){ if (MxSegLen==-1){MxSegLen=MxBlobFLen;} TStr NrBlobBsFNm=GetNrBlobBsFNm(BlobBsFNm); switch (Access){ case faCreate: FBlobBs=TFRnd::New(NrBlobBsFNm, faCreate, true); break; case faUpdate: case faRdOnly: case faRestore: FBlobBs=TFRnd::New(NrBlobBsFNm, faUpdate, true); break; default: Fail; } if (FBlobBs->Empty()){ FBlobBs->SetFPos(0); PutVersionStr(FBlobBs); PutBlobBsStateStr(FBlobBs, bbsOpened); PutMxSegLen(FBlobBs, MxSegLen); GenBlockLenV(BlockLenV); PutBlockLenV(FBlobBs, BlockLenV); GenFFreeBlobPtV(BlockLenV, FFreeBlobPtV); PutFFreeBlobPtV(FBlobBs, FFreeBlobPtV); } else { FBlobBs->SetFPos(0); AssertVersionStr(FBlobBs); int FPos=FBlobBs->GetFPos(); if (Access!=faRestore){ AssertBlobBsStateStr(FBlobBs, bbsClosed);} if (Access!=faRdOnly){ FBlobBs->SetFPos(FPos); PutBlobBsStateStr(FBlobBs, bbsOpened); } MxSegLen=GetMxSegLen(FBlobBs); GetBlockLenV(FBlobBs, BlockLenV); GetFFreeBlobPtV(FBlobBs, FFreeBlobPtV); } FirstBlobPt=TBlobPt(FBlobBs->GetFPos()); FBlobBs->Flush(); }


Definition at line 262 of file blobbs.cpp.
References Access, bbsClosed, BlockLenV, faRdOnly, FBlobBs, FFreeBlobPtV, TFRnd::Flush(), MxSegLen, TBlobBs::PutBlobBsStateStr(), TBlobBs::PutBlockLenV(), TBlobBs::PutFFreeBlobPtV(), TBlobBs::PutMxSegLen(), TBlobBs::PutVersionStr(), and TFRnd::SetFPos().
                   {
  if (Access!=faRdOnly){
    FBlobBs->SetFPos(0);
    PutVersionStr(FBlobBs);
    PutBlobBsStateStr(FBlobBs, bbsClosed);
    PutMxSegLen(FBlobBs, MxSegLen);
    PutBlockLenV(FBlobBs, BlockLenV);
    PutFFreeBlobPtV(FBlobBs, FFreeBlobPtV);
  }
  FBlobBs->Flush();
  FBlobBs=NULL;
}

| void TGBlobBs::DelBlob | ( | const TBlobPt & | BlobPt | ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 353 of file blobbs.cpp.
References Access, TBlobBs::AssertBlobState(), TBlobBs::AssertBlobTag(), BlockLenV, bsActive, bsFree, btBegin, btEnd, EAssert, faCreate, faRestore, faUpdate, FBlobBs, FFreeBlobPtV, TFRnd::Flush(), TBlobPt::GetAddr(), TBlobBs::GetAllocInfo(), TFRnd::GetFPos(), TFRnd::GetInt(), TCh::NullCh, TBlobBs::PutBlobState(), TFRnd::PutCh(), and TFRnd::SetFPos().
Referenced by PutBlob().
                                           {
  EAssert((Access==faCreate)||(Access==faUpdate)||(Access==faRestore));
  FBlobBs->SetFPos(BlobPt.GetAddr());
  AssertBlobTag(FBlobBs, btBegin);
  int MxBfL=FBlobBs->GetInt();
  int FPos=FBlobBs->GetFPos();
  AssertBlobState(FBlobBs, bsActive);
  /*int BfL=*/FBlobBs->GetInt();
  FBlobBs->SetFPos(FPos);
  PutBlobState(FBlobBs, bsFree);
  int _MxBfL; int FFreeBlobPtN;
  GetAllocInfo(MxBfL, BlockLenV, _MxBfL, FFreeBlobPtN);
  EAssert(MxBfL==_MxBfL);
  FFreeBlobPtV[FFreeBlobPtN].SaveAddr(FBlobBs);
  FFreeBlobPtV[FFreeBlobPtN]=BlobPt;
  FBlobBs->PutCh(TCh::NullCh, MxBfL+sizeof(TCs));
  AssertBlobTag(FBlobBs, btEnd);
  FBlobBs->Flush();
}


| bool TGBlobBs::Exists | ( | const TStr & | BlobBsFNm | ) |  [static] | 
        
Definition at line 410 of file blobbs.cpp.
References GetNrBlobBsFNm().
                                          {
  TStr NrBlobBsFNm=GetNrBlobBsFNm(BlobBsFNm);
  return TFile::Exists(NrBlobBsFNm);
}

| TBlobPt TGBlobBs::FFirstBlobPt | ( | ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 373 of file blobbs.cpp.
References FirstBlobPt.
                              {
  return FirstBlobPt;
}
| bool TGBlobBs::FNextBlobPt | ( | TBlobPt & | TrvBlobPt, | 
| TBlobPt & | BlobPt, | ||
| PSIn & | BlobSIn | ||
| ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 377 of file blobbs.cpp.
References TBlobBs::AssertBfCsEqFlCs(), TBlobBs::AssertBlobTag(), bsActive, bsFree, btBegin, btEnd, TBlobPt::Clr(), Fail, FBlobBs, forever, TBlobPt::GetAddr(), TBlobBs::GetBlobState(), TFRnd::GetCs(), TFRnd::GetFLen(), TFRnd::GetFPos(), TFRnd::GetInt(), TFRnd::GetSIn(), TFRnd::MoveFPos(), and TFRnd::SetFPos().
                                                                            {
  forever {
    uint TrvBlobAddr=TrvBlobPt.GetAddr();
    if (TrvBlobAddr>=uint(FBlobBs->GetFLen())){
      TrvBlobPt.Clr(); BlobPt.Clr(); BlobSIn=NULL;
      return false;
    } else {
      FBlobBs->SetFPos(TrvBlobAddr);
      AssertBlobTag(FBlobBs, btBegin);
      int MxBfL=FBlobBs->GetInt();
      TBlobState BlobState=GetBlobState(FBlobBs);
      switch (BlobState){
        case bsActive:{
          int BfL=FBlobBs->GetInt();
          TCs BfCs; BlobSIn=FBlobBs->GetSIn(BfL, BfCs);
          FBlobBs->MoveFPos(MxBfL-BfL);
          TCs FCs=FBlobBs->GetCs();
          AssertBlobTag(FBlobBs, btEnd);
          AssertBfCsEqFlCs(BfCs, FCs);
          BlobPt=TrvBlobPt;
          TrvBlobPt=TBlobPt(FBlobBs->GetFPos());
          return true;}
        case bsFree:
          FBlobBs->MoveFPos(sizeof(uint)+MxBfL+sizeof(TCs));
          AssertBlobTag(FBlobBs, btEnd);
          TrvBlobPt=TBlobPt(FBlobBs->GetFPos());
          break;
        default: Fail; return false;
      }
    }
  }
}

| PSIn TGBlobBs::GetBlob | ( | const TBlobPt & | BlobPt | ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 339 of file blobbs.cpp.
References TBlobBs::AssertBfCsEqFlCs(), TBlobBs::AssertBlobState(), TBlobBs::AssertBlobTag(), bsActive, btBegin, btEnd, FBlobBs, TBlobPt::GetAddr(), TFRnd::GetCs(), TFRnd::GetInt(), TFRnd::GetSIn(), TFRnd::MoveFPos(), and TFRnd::SetFPos().
                                           {
  FBlobBs->SetFPos(BlobPt.GetAddr());
  AssertBlobTag(FBlobBs, btBegin);
  int MxBfL=FBlobBs->GetInt();
  AssertBlobState(FBlobBs, bsActive);
  int BfL=FBlobBs->GetInt();
  TCs BfCs; PSIn SIn=FBlobBs->GetSIn(BfL, BfCs);
  FBlobBs->MoveFPos(MxBfL-BfL);
  TCs FCs=FBlobBs->GetCs();
  AssertBlobTag(FBlobBs, btEnd);
  AssertBfCsEqFlCs(BfCs, FCs);
  return SIn;
}

| TBlobPt TGBlobBs::GetFirstBlobPt | ( | ) |  [inline, virtual] | 
        
Implements TBlobBs.
Definition at line 179 of file blobbs.h.
References FirstBlobPt.
{return FirstBlobPt;}
| TStr TGBlobBs::GetNrBlobBsFNm | ( | const TStr & | BlobBsFNm | ) |  [static, private] | 
        
Definition at line 213 of file blobbs.cpp.
References TStr::Empty(), and TStr::GetFExt().
Referenced by Exists(), and TGBlobBs().
                                                  {
  TStr NrBlobBsFNm=BlobBsFNm;
  if (NrBlobBsFNm.GetFExt().Empty()){
    NrBlobBsFNm=NrBlobBsFNm+".gbb";}
  return NrBlobBsFNm;
}


| TStr TGBlobBs::GetVersionStr | ( | ) |  const [inline, virtual] | 
        
| static PBlobBs TGBlobBs::New | ( | const TStr & | BlobBsFNm, | 
| const TFAccess & | Access = faRdOnly,  | 
        ||
| const int & | MxSegLen = -1  | 
        ||
| ) |  [inline, static] | 
        
Definition at line 166 of file blobbs.h.
References Access, MxSegLen, and TGBlobBs().
Referenced by TGBlobBs(), and TMBlobBs::TMBlobBs().


| TBlobPt TGBlobBs::PutBlob | ( | const PSIn & | SIn | ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 275 of file blobbs.cpp.
References Access, TBlobBs::AssertBlobState(), TBlobBs::AssertBlobTag(), BlockLenV, bsActive, bsFree, btBegin, btEnd, EAssert, faCreate, faRestore, faUpdate, FBlobBs, FFreeBlobPtV, TFRnd::Flush(), TBlobPt::GetAddr(), TBlobBs::GetAllocInfo(), TFRnd::GetFLen(), TFRnd::GetFPos(), TFRnd::GetInt(), TSIn::Len(), TBlobPt::LoadAddr(), TBlobBs::MxBlobFLen, MxSegLen, TCh::NullCh, TBlobBs::PutBlobState(), TBlobBs::PutBlobTag(), TFRnd::PutCh(), TFRnd::PutCs(), TFRnd::PutInt(), TFRnd::PutSIn(), and TFRnd::SetFPos().
Referenced by PutBlob().
                                        {
  EAssert((Access==faCreate)||(Access==faUpdate)||(Access==faRestore));
  int BfL=SIn->Len();
  int MxBfL; int FFreeBlobPtN;
  GetAllocInfo(BfL, BlockLenV, MxBfL, FFreeBlobPtN);
  TBlobPt BlobPt; TCs Cs;
  if (FFreeBlobPtV[FFreeBlobPtN].Empty()){
    int FLen=FBlobBs->GetFLen();
    if (FLen<=MxSegLen){
      EAssert(FLen<=MxBlobFLen);
      BlobPt=TBlobPt(FLen);
      FBlobBs->SetFPos(BlobPt.GetAddr());
      PutBlobTag(FBlobBs, btBegin);
      FBlobBs->PutInt(MxBfL);
      PutBlobState(FBlobBs, bsActive);
      FBlobBs->PutInt(BfL);
      FBlobBs->PutSIn(SIn, Cs);
      FBlobBs->PutCh(TCh::NullCh, MxBfL-BfL);
      FBlobBs->PutCs(Cs);
      PutBlobTag(FBlobBs, btEnd);
    }
  } else {
    BlobPt=FFreeBlobPtV[FFreeBlobPtN];
    FBlobBs->SetFPos(BlobPt.GetAddr());
    AssertBlobTag(FBlobBs, btBegin);
    int MxBfL=FBlobBs->GetInt();
    int FPos=FBlobBs->GetFPos();
    AssertBlobState(FBlobBs, bsFree);
    FFreeBlobPtV[FFreeBlobPtN]=TBlobPt::LoadAddr(FBlobBs);
    FBlobBs->SetFPos(FPos);
    PutBlobState(FBlobBs, bsActive);
    FBlobBs->PutInt(BfL);
    FBlobBs->PutSIn(SIn, Cs);
    FBlobBs->PutCh(TCh::NullCh, MxBfL-BfL);
    FBlobBs->PutCs(Cs);
    AssertBlobTag(FBlobBs, btEnd);
  }
  FBlobBs->Flush();
  return BlobPt;
}


| TBlobPt TGBlobBs::PutBlob | ( | const TBlobPt & | BlobPt, | 
| const PSIn & | SIn | ||
| ) |  [virtual] | 
        
Implements TBlobBs.
Definition at line 316 of file blobbs.cpp.
References Access, TBlobBs::AssertBlobState(), TBlobBs::AssertBlobTag(), bsActive, btBegin, btEnd, DelBlob(), EAssert, faCreate, faRestore, faUpdate, FBlobBs, TFRnd::Flush(), TBlobPt::GetAddr(), TFRnd::GetInt(), TSIn::Len(), TCh::NullCh, PutBlob(), TBlobBs::PutBlobTag(), TFRnd::PutCh(), TFRnd::PutCs(), TFRnd::PutInt(), TFRnd::PutSIn(), and TFRnd::SetFPos().
                                                               {
  EAssert((Access==faCreate)||(Access==faUpdate)||(Access==faRestore));
  int BfL=SIn->Len();
  FBlobBs->SetFPos(BlobPt.GetAddr());
  AssertBlobTag(FBlobBs, btBegin);
  int MxBfL=FBlobBs->GetInt();
  AssertBlobState(FBlobBs, bsActive);
  if (BfL>MxBfL){
    DelBlob(BlobPt);
    return PutBlob(SIn);
  } else {
    TCs Cs;
    FBlobBs->PutInt(BfL);
    FBlobBs->PutSIn(SIn, Cs);
    FBlobBs->PutCh(TCh::NullCh, MxBfL-BfL);
    FBlobBs->PutCs(Cs);
    PutBlobTag(FBlobBs, btEnd);
    FBlobBs->Flush();
    return BlobPt;
  }
}

TFAccess TGBlobBs::Access [private] | 
        
Definition at line 157 of file blobbs.h.
Referenced by DelBlob(), New(), PutBlob(), TGBlobBs(), and ~TGBlobBs().
TIntV TGBlobBs::BlockLenV [private] | 
        
Definition at line 159 of file blobbs.h.
Referenced by DelBlob(), PutBlob(), TGBlobBs(), and ~TGBlobBs().
PFRnd TGBlobBs::FBlobBs [private] | 
        
Definition at line 156 of file blobbs.h.
Referenced by DelBlob(), FNextBlobPt(), GetBlob(), PutBlob(), TGBlobBs(), and ~TGBlobBs().
TBlobPtV TGBlobBs::FFreeBlobPtV [private] | 
        
Definition at line 160 of file blobbs.h.
Referenced by DelBlob(), PutBlob(), TGBlobBs(), and ~TGBlobBs().
TBlobPt TGBlobBs::FirstBlobPt [private] | 
        
Definition at line 161 of file blobbs.h.
Referenced by FFirstBlobPt(), GetFirstBlobPt(), and TGBlobBs().
int TGBlobBs::MxSegLen [private] | 
        
Definition at line 158 of file blobbs.h.
Referenced by New(), PutBlob(), TGBlobBs(), and ~TGBlobBs().