SNAP Library, User Reference  2012-10-15 15:06:59
SNAP, a general purpose network analysis and graph mining library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
TGBlobBs Class Reference

#include <blobbs.h>

List of all members.

Public Member Functions

 TGBlobBs (const TStr &BlobBsFNm, const TFAccess &_Access=faRdOnly, const int &_MxSegLen=-1)
 ~TGBlobBs ()
TGBlobBsoperator= (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

Detailed Description

Definition at line 152 of file blobbs.h.


Constructor & Destructor Documentation

TGBlobBs::TGBlobBs ( const TStr BlobBsFNm,
const TFAccess _Access = faRdOnly,
const int &  _MxSegLen = -1 
)

Member Function Documentation

void TGBlobBs::DelBlob ( const TBlobPt BlobPt)

Definition at line 353 of file blobbs.cpp.

                                           {
  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.

                                          {
  TStr NrBlobBsFNm=GetNrBlobBsFNm(BlobBsFNm);
  return TFile::Exists(NrBlobBsFNm);
}

Definition at line 373 of file blobbs.cpp.

                              {
  return FirstBlobPt;
}
bool TGBlobBs::FNextBlobPt ( TBlobPt TrvBlobPt,
TBlobPt BlobPt,
PSIn BlobSIn 
)

Definition at line 377 of file blobbs.cpp.

                                                                            {
  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)

Definition at line 339 of file blobbs.cpp.

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

Definition at line 177 of file blobbs.h.

{return FirstBlobPt;}
TStr TGBlobBs::GetNrBlobBsFNm ( const TStr BlobBsFNm) [static, private]

Definition at line 213 of file blobbs.cpp.

                                                  {
  TStr NrBlobBsFNm=BlobBsFNm;
  if (NrBlobBsFNm.GetFExt().Empty()){
    NrBlobBsFNm=NrBlobBsFNm+".gbb";}
  return NrBlobBsFNm;
}
TStr TGBlobBs::GetVersionStr ( ) const [inline]

Definition at line 171 of file blobbs.h.

{return TStr("General Blob Base Format 1.0");}
static PBlobBs TGBlobBs::New ( const TStr BlobBsFNm,
const TFAccess Access = faRdOnly,
const int &  MxSegLen = -1 
) [inline, static]

Definition at line 164 of file blobbs.h.

                          {
    return PBlobBs(new TGBlobBs(BlobBsFNm, Access, MxSegLen));}
TGBlobBs& TGBlobBs::operator= ( const TGBlobBs ) [inline]

Definition at line 169 of file blobbs.h.

{Fail; return *this;}
TBlobPt TGBlobBs::PutBlob ( const PSIn SIn)

Definition at line 275 of file blobbs.cpp.

                                        {
  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 
)

Definition at line 316 of file blobbs.cpp.

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

Member Data Documentation

Definition at line 155 of file blobbs.h.

Definition at line 157 of file blobbs.h.

PFRnd TGBlobBs::FBlobBs [private]

Definition at line 154 of file blobbs.h.

TBlobPtV TGBlobBs::FFreeBlobPtV [private]

Definition at line 158 of file blobbs.h.

Definition at line 159 of file blobbs.h.

int TGBlobBs::MxSegLen [private]

Definition at line 156 of file blobbs.h.


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