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