summaryrefslogtreecommitdiff
path: root/dwarfgen/strtabdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'dwarfgen/strtabdata.h')
-rwxr-xr-xdwarfgen/strtabdata.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/dwarfgen/strtabdata.h b/dwarfgen/strtabdata.h
new file mode 100755
index 0000000..d005055
--- /dev/null
+++ b/dwarfgen/strtabdata.h
@@ -0,0 +1,65 @@
+#ifndef STRTABDATA_H
+#define STRTABDATA_H
+/*
+ Copyright (C) 2010-2011 David Anderson.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it would be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write the Free Software Foundation, Inc., 51
+ Franklin Street - Fifth Floor, Boston MA 02110-1301, USA.
+
+*/
+
+
+// strtabdata.h
+// Creates a string table in a way consistent with
+// elf string tables. The zero index is a null byte always.
+
+class strtabdata {
+public:
+ strtabdata(): data_(new char[1000]),
+ datalen_(1000), nexttouse_(0) { data_[0] = 0; nexttouse_ = 1;};
+ ~strtabdata() { delete[]data_; };
+ unsigned addString(const std::string & newstr) {
+ // The 1 is for the terminating null byte.
+ unsigned nsz = newstr.size() +1;
+ unsigned needed = nexttouse_ + nsz;
+ if (needed >= datalen_) {
+ unsigned baseincr = nsz;
+ unsigned altincr = datalen_*2;
+ if(altincr> baseincr) {
+ baseincr = altincr;
+ }
+ unsigned newsize = datalen_ + baseincr;
+ char *newdata = new char [newsize];
+ memcpy(newdata, data_, nexttouse_);
+ delete [] data_;
+ data_ = newdata;
+ datalen_ = newsize;
+ }
+ memcpy(data_ + nexttouse_, newstr.c_str(),nsz);
+ unsigned newstrindex = nexttouse_;
+ nexttouse_ += nsz;
+ return newstrindex;
+ };
+ void *exposedata() {return (void *)data_;};
+ unsigned exposelen() const {return nexttouse_;};
+private:
+ char * data_;
+
+ // datalen_ is the size in bytes pointed to by data_ .
+ unsigned datalen_;
+
+ // nexttouse_ is the index of the next (unused) byte in
+ // data_ , so it is also the amount of space in data_ that
+ // is in use.
+ unsigned nexttouse_;
+};
+#endif /* STRTABDATA_H */