All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Static Public Member Functions
GpCoreTools::File Class Reference

File manipulation tools. More...

#include <File.h>

List of all members.

Static Public Member Functions

static std::vector< std::string > * complete (const std::string &beginFilePath)
static bool match (const char *buffer, int &bytesRead, int bytesCount, const char *string)
static char * readAll (const char *fileName)
static double readDouble (const char *buffer, int &bytesRead, int bytesCount, bool &ok)
static int readInteger (const char *buffer, int &bytesRead, int bytesCount, bool &ok)
static bool readLine (char *&buf, int &bufLen, FILE *f, bool delEOL=false)
static long int readLongInteger (const char *buffer, int &bytesRead, int bytesCount, bool &ok)

Detailed Description

File manipulation tools.

Full description of class still missing


Member Function Documentation

std::vector< std::string > * GpCoreTools::File::complete ( const std::string &  beginFilePath) [static]

For instance, beginFilePath can be "/dev/serial/by-id/usb-LEAS_DASCUBE". "/dev/serial/by-id/usb-LEAS_DASCUBE_DS011105-if00-port0" is returned, if this file exists.

A pointer to a vector is returned. In all cases, you must delete this pointer.

  {
    std::vector<std::string> * files=new std::vector<std::string>;

    // Breaks path and file base name
    const char * baseName=strrchr(beginFilePath.data(), '/');
    int pathLength=baseName-beginFilePath.data();
    char * pathTemp=new char[pathLength+2];
    strncpy(pathTemp, beginFilePath.data(), pathLength);
    pathTemp[pathLength]='/';
    pathTemp[pathLength+1]='\0';
    std::string path(pathTemp);
    delete [] pathTemp;
    baseName++;
    int baseNameLength=strlen(baseName);

    struct dirent *dirp;
    DIR *dp;
    if(!(dp=opendir(path.data()))) {
      return files;
    }

    while((dirp=readdir(dp))) {
      if(strncmp(baseName, dirp->d_name, baseNameLength)==0) {
        files->push_back(path+std::string(dirp->d_name));
      }
    }
    closedir(dp);
    return files;
  }
bool GpCoreTools::File::match ( const char *  buffer,
int &  bytesRead,
int  bytesCount,
const char *  string 
) [static]

Returns true if buffer at bytesRead index starts with string.

  {
    int n=bytesCount-bytesRead;
    int sn=strlen(string);
    if(n>=sn && strncmp(buffer+bytesRead, string, sn)==0) {
      bytesRead+=sn;
      return true;
    } else {
      return false;
    }
  }
char * GpCoreTools::File::readAll ( const char *  fileName) [static]

Reads all file and returns its contents in a newly allocated buffer. It returns 0 if an error occured or if file is empty.

  {
    struct stat sInfo;
    int sErr=stat(fileName, &sInfo);
    if(sErr==0) {
      unsigned int fileLen=sInfo.st_size;
      if(fileLen>0) {
        FILE * f=fopen(fileName,"rb");
        if(f) {
          char * buf=new char [fileLen+1];
          if(fread(buf,sizeof(char),fileLen,f)==fileLen) {
            buf[fileLen]='\0';
          } else {
            delete [] buf;
            buf=0;
          }
          fclose(f);
          return buf;
        }
      }
    }
    return 0;
  }
double GpCoreTools::File::readDouble ( const char *  buffer,
int &  bytesRead,
int  bytesCount,
bool &  ok 
) [static]

Returns -1 if value is truncated and bytesRead is not modified.

  {
    int i;
    double value;
    for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {}
    int n=i-bytesRead;
    if(n>0 && i<bytesCount) {
      char * temp=new char[n+1];
      strncpy(temp, buffer+bytesRead, n);
      temp[n]='\0';
      value=atof(temp);
      bytesRead=i;
      ok=true;
      delete [] temp;
    } else {
      value=-1;
      ok=false;
    }
    return value;
  }
int GpCoreTools::File::readInteger ( const char *  buffer,
int &  bytesRead,
int  bytesCount,
bool &  ok 
) [static]

Returns -1 if value is truncated and bytesRead is not modified.

  {
    int i;
    int value;
    for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {}
    int n=i-bytesRead;
    if(n>0 && i<bytesCount) {
      char * temp=new char[n+1];
      strncpy(temp, buffer+bytesRead, n);
      temp[n]='\0';
      value=atoi(temp);
      bytesRead=i;
      ok=true;
      delete [] temp;
    } else {
      value=-1;
      ok=false;
    }
    return value;
  }
bool GpCoreTools::File::readLine ( char *&  buf,
int &  bufLen,
FILE *  f,
bool  delEOL = false 
) [static]

Returns the line read from f in a dynamic string buffer buf of initial length of bufLen.. If the line read from f is longer than initial bufLen, buffer is re-allocated and expanded. bufLen contains the final length. If delEOL is true remaining end of line characters (LF and/or CR) at the end are removed.

Referenced by GpCoreTools::CoreApplication::getStdin().

  {
    buf[0]='\0';
    if(!fgets (buf, bufLen, f)) {
      return false;
    }
    while((int)strlen(buf)==bufLen-1) {
      int nbufLen=bufLen << 1;
      char * nbuf=new char [nbufLen];
      memmove(nbuf,buf,bufLen-1);
      delete [] buf;
      buf=nbuf;
      if(!fgets(buf+bufLen-1, bufLen+1, f)) {
        break;
      }
      bufLen=nbufLen;
    }
    if(delEOL) {
      int n=strlen(buf)-1;
      if(buf[n]=='\n') {
        if(buf[n-1]=='\r') {
          buf[n-1]='\0';
        } else {
          buf[n]='\0';
        }
      }
    }
    return true;
  }
long int GpCoreTools::File::readLongInteger ( const char *  buffer,
int &  bytesRead,
int  bytesCount,
bool &  ok 
) [static]

Returns -1 if value is truncated and bytesRead is not modified.

  {
    int i;
    long int value;
    for(i=bytesRead; i<bytesCount && !isspace(buffer[i]); i++) {}
    int n=i-bytesRead;
    if(n>0 && i<bytesCount) {
      char * temp=new char[n+1];
      strncpy(temp, buffer+bytesRead, n);
      temp[n]='\0';
      value=atol(temp);
      bytesRead=i;
      ok=true;
      delete [] temp;
    } else {
      value=-1;
      ok=false;
    }
    return value;
  }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines