SNAP Library 2.0, User Reference  2013-05-13 16:33:57
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
TFIn Class Reference

#include <fl.h>

Inherits TSIn.

List of all members.

Public Member Functions

 TFIn (const TStr &FNm)
 TFIn (const TStr &FNm, bool &OpenedP)
 ~TFIn ()
bool Eof ()
int Len () const
char GetCh ()
char PeekCh ()
int GetBf (const void *LBf, const TSize &LBfL)
void Reset ()
bool GetNextLnBf (TChA &LnChA)

Static Public Member Functions

static PSIn New (const TStr &FNm)
static PSIn New (const TStr &FNm, bool &OpenedP)

Private Member Functions

void SetFPos (const int &FPos) const
int GetFPos () const
int GetFLen () const
void FillBf ()
int FindEol (int &BfN, bool &CrEnd)
 TFIn ()
 TFIn (const TFIn &)
TFInoperator= (const TFIn &)

Private Attributes

TFileId FileId
char * Bf
int BfC
int BfL

Static Private Attributes

static const int MxBfL = 16*1024

Detailed Description

Definition at line 275 of file fl.h.


Constructor & Destructor Documentation

TFIn::TFIn ( ) [private]
TFIn::TFIn ( const TFIn ) [private]
TFIn::TFIn ( const TStr FNm)

Definition at line 273 of file fl.cpp.

                         :
  TSBase(FNm.CStr()), TSIn(FNm), FileId(NULL), Bf(NULL), BfC(0), BfL(0){
  EAssertR(!FNm.Empty(), "Empty file-name.");
  FileId=fopen(FNm.CStr(), "rb");
  EAssertR(FileId!=NULL, "Can not open file '"+FNm+"'.");
  Bf=new char[MxBfL]; BfC=BfL=-1; FillBf();
}
TFIn::TFIn ( const TStr FNm,
bool &  OpenedP 
)

Definition at line 281 of file fl.cpp.

                                        :
  TSBase(FNm.CStr()), TSIn(FNm), FileId(NULL), Bf(NULL), BfC(0), BfL(0){
  EAssertR(!FNm.Empty(), "Empty file-name.");
  FileId=fopen(FNm.CStr(), "rb");
  OpenedP=(FileId!=NULL);
  if (OpenedP){
    Bf=new char[MxBfL]; BfC=BfL=-1; FillBf();}
}

Definition at line 298 of file fl.cpp.

           {
  if (FileId!=NULL){
    EAssertR(fclose(FileId)==0, "Can not close file '"+GetSNm()+"'.");}
  if (Bf!=NULL){delete[] Bf;}
}

Member Function Documentation

bool TFIn::Eof ( ) [inline, virtual]

Implements TSIn.

Definition at line 298 of file fl.h.

            {
    if ((BfC==BfL)&&(BfL==MxBfL)){FillBf();}
    return (BfC==BfL)&&(BfL<MxBfL);}
void TFIn::FillBf ( ) [private]

Definition at line 264 of file fl.cpp.

                 {
  EAssertR(
   (BfC==BfL)&&((BfL==-1)||(BfL==MxBfL)),
   "Error reading file '"+GetSNm()+"'.");
  BfL=int(fread(Bf, 1, MxBfL, FileId));
  EAssertR((BfC!=0)||(BfL!=0), "Error reading file '"+GetSNm()+"'.");
  BfC=0;
}
int TFIn::FindEol ( int &  BfN,
bool &  CrEnd 
) [private]

Definition at line 360 of file fl.cpp.

                                       {
  char Ch;

  if (BfC >= BfL) {
    // read more data, check for eof
    if (Eof()) {
      return -1;
    }
    if (CrEnd && Bf[BfC]=='\n') {
      BfC++;
      BfN = BfC-1;
      return 1;
    }
  }

  CrEnd = false;
  while (BfC < BfL) {
    Ch = Bf[BfC++];
    if (Ch=='\n') {
      BfN = BfC-1;
      return 1;
    }
    if (Ch=='\r') {
      if (BfC == BfL) {
        CrEnd = true;
        BfN = BfC-1;
        return 0;
      } else if (Bf[BfC]=='\n') {
        BfC++;
        BfN = BfC-2;
        return 1;
      }
    }
  }
  BfN = BfC;

  return 0;
}
int TFIn::GetBf ( const void *  LBf,
const TSize LBfL 
) [virtual]

Implements TSIn.

Definition at line 304 of file fl.cpp.

                                                 {
  int LBfS=0;
  if (TSize(BfC+LBfL)>TSize(BfL)){
    for (TSize LBfC=0; LBfC<LBfL; LBfC++){
      if (BfC==BfL){FillBf();}
      LBfS+=((char*)LBf)[LBfC]=Bf[BfC++];}
  } else {
    for (TSize LBfC=0; LBfC<LBfL; LBfC++){
      LBfS+=(((char*)LBf)[LBfC]=Bf[BfC++]);}
  }
  return LBfS;
}
char TFIn::GetCh ( ) [inline, virtual]

Implements TSIn.

Definition at line 302 of file fl.h.

              {
    if (BfC==BfL){if (Eof()){return 0;} return Bf[BfC++];}
    else {return Bf[BfC++];}}
int TFIn::GetFLen ( ) const [private]

Definition at line 255 of file fl.cpp.

                        {
  const int FPos=GetFPos();
  EAssertR(
   fseek(FileId, 0, SEEK_END)==0,
   "Error seeking into file '"+GetSNm()+"'.");
  const int FLen=GetFPos(); SetFPos(FPos);
  return FLen;
}
int TFIn::GetFPos ( ) const [private]

Definition at line 249 of file fl.cpp.

                        {
  const int FPos=(int)ftell(FileId);
  EAssertR(FPos!=-1, "Error seeking into file '"+GetSNm()+"'.");
  return FPos;
}
bool TFIn::GetNextLnBf ( TChA LnChA) [virtual]

Implements TSIn.

Definition at line 321 of file fl.cpp.

                                  {
  int Status;
  int BfN;        // new pointer to the end of line
  int BfP;        // previous pointer to the line start
  bool CrEnd;     // last character in previous buffer was CR

  LnChA.Clr();

  CrEnd = false;
  do {
    if (BfC >= BfL) {
      // reset the current pointer, FindEol() will read a new buffer
      BfP = 0;
    } else {
      BfP = BfC;
    }
    Status = FindEol(BfN,CrEnd);
    if (Status >= 0) {
      if (BfN-BfP > 0) {
        LnChA.AddBf(&Bf[BfP],BfN-BfP);
      }
      if (Status == 1) {
        // got a complete line
        return true;
      }
    }
    // get more data, if the line is incomplete
  } while (Status == 0);

  // eof or the last line has no newline
  return !LnChA.Empty();
}
int TFIn::Len ( ) const [inline, virtual]

Implements TSIn.

Definition at line 301 of file fl.h.

{return GetFLen()-(GetFPos()-BfL+BfC);}
PSIn TFIn::New ( const TStr FNm) [static]

Definition at line 290 of file fl.cpp.

                             {
  return PSIn(new TFIn(FNm));
}
PSIn TFIn::New ( const TStr FNm,
bool &  OpenedP 
) [static]

Definition at line 294 of file fl.cpp.

                                            {
  return PSIn(new TFIn(FNm, OpenedP));
}
TFIn& TFIn::operator= ( const TFIn ) [private]
char TFIn::PeekCh ( ) [inline, virtual]

Implements TSIn.

Definition at line 305 of file fl.h.

               {
    if (BfC==BfL){if (Eof()){return 0;} return Bf[BfC];}
    else {return Bf[BfC];}}
void TFIn::Reset ( ) [inline, virtual]

Reimplemented from TSIn.

Definition at line 309 of file fl.h.

{rewind(FileId); Cs=TCs(); BfC=BfL=-1; FillBf();}
void TFIn::SetFPos ( const int &  FPos) const [private]

Definition at line 243 of file fl.cpp.

                                        {
  EAssertR(
   fseek(FileId, FPos, SEEK_SET)==0,
   "Error seeking into file '"+GetSNm()+"'.");
}

Member Data Documentation

char* TFIn::Bf [private]

Definition at line 279 of file fl.h.

int TFIn::BfC [private]

Definition at line 280 of file fl.h.

int TFIn::BfL [private]

Definition at line 280 of file fl.h.

TFileId TFIn::FileId [private]

Definition at line 278 of file fl.h.

const int TFIn::MxBfL = 16*1024 [static, private]

Definition at line 277 of file fl.h.


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