Blame src/growbuf.h

Packit 1c1d7e
#ifndef GROWBUF_H
Packit 1c1d7e
#define GROWBUF_H
Packit 1c1d7e
Packit 1c1d7e
#include <stdlib.h>
Packit 1c1d7e
#include <string.h>
Packit 1c1d7e
Packit 1c1d7e
#define GROW_AMOUNT 1024
Packit 1c1d7e
Packit 1c1d7e
/** Class representing a string buffer optimised for growing. */
Packit 1c1d7e
class GrowBuf
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    GrowBuf() : str(0), pos(0), len(0) {}
Packit 1c1d7e
   ~GrowBuf()         { free(str); str=0; pos=0; len=0; }
Packit 1c1d7e
    void clear()      { pos=0; }
Packit 1c1d7e
    void addChar(char c)  { if (pos>=len) { len+=GROW_AMOUNT; str = (char*)realloc(str,len); } 
Packit 1c1d7e
                        str[pos++]=c; 
Packit 1c1d7e
                      }
Packit 1c1d7e
    void addStr(const char *s) {
Packit 1c1d7e
                        if (s)
Packit 1c1d7e
                        {
Packit 1c1d7e
                          int l=strlen(s);
Packit 1c1d7e
                          if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
Packit 1c1d7e
                          strcpy(&str[pos],s);
Packit 1c1d7e
                          pos+=l;
Packit 1c1d7e
                        }
Packit 1c1d7e
                      }
Packit 1c1d7e
    void addStr(const char *s,int n) {
Packit 1c1d7e
                        if (s)
Packit 1c1d7e
                        {
Packit 1c1d7e
                          int l=strlen(s);
Packit 1c1d7e
                          if (n
Packit 1c1d7e
                          if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
Packit 1c1d7e
                          strncpy(&str[pos],s,n);
Packit 1c1d7e
                          pos+=l;
Packit 1c1d7e
                        }
Packit 1c1d7e
                      }
Packit 1c1d7e
    const char *get()     { return str; }
Packit 1c1d7e
    int getPos() const    { return pos; }
Packit 1c1d7e
    char at(int i) const  { return str[i]; }
Packit 1c1d7e
  private:
Packit 1c1d7e
    char *str;
Packit 1c1d7e
    int pos;
Packit 1c1d7e
    int len;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
#endif