summaryrefslogtreecommitdiffstats
path: root/src/growbuf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/growbuf.h')
-rw-r--r--src/growbuf.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/growbuf.h b/src/growbuf.h
new file mode 100644
index 0000000..6798692
--- /dev/null
+++ b/src/growbuf.h
@@ -0,0 +1,38 @@
+#ifndef GROWBUF_H
+#define GROWBUF_H
+
+#include <stdlib.h>
+#include <string.h>
+
+class GrowBuf
+{
+ public:
+ GrowBuf() : str(0), pos(0), len(0) {}
+ ~GrowBuf() { free(str); str=0; pos=0; len=0; }
+ void clear() { pos=0; }
+ void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); }
+ str[pos++]=c;
+ }
+ void addStr(const char *s) {
+ int l=strlen(s);
+ if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
+ strcpy(&str[pos],s);
+ pos+=l;
+ }
+ void addStr(const char *s,int n) {
+ int l=strlen(s);
+ if (n<l) l=n;
+ if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
+ strncpy(&str[pos],s,n);
+ pos+=l;
+ }
+ const char *get() { return str; }
+ int getPos() const { return pos; }
+ char at(int i) const { return str[i]; }
+ private:
+ char *str;
+ int pos;
+ int len;
+};
+
+#endif