diff options
Diffstat (limited to 'src/bufstr.h')
-rw-r--r-- | src/bufstr.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/bufstr.h b/src/bufstr.h new file mode 100644 index 0000000..576dac7 --- /dev/null +++ b/src/bufstr.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * + * + * + * + * Copyright (C) 1997-2001 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ +#ifndef _BUFSTR_H +#define _BUFSTR_H + +#include "qtbc.h" + +/*! String that can deal more efficiently with large large numbers + * of resizing. + */ +class BufStr : public QCString +{ + public: + BufStr(int size) : QCString(size), offset(0), spareRoom(10240) {} + void addChar(char c) + { + if (offset>=size()) + { + resize(size()+spareRoom); + } + data()[offset++]=c; + } + void addArray(const char *a,int len) + { + if (offset+len>=size()) + { + resize(size()+len+spareRoom); + } + memcpy(data()+offset,a,len); + offset+=len; + } + uint curPos() { return offset; } + void skip(uint s) + { + if (offset+s>=size()) + { + resize(size()+s+spareRoom); + } + offset+=s; + } + private: + uint offset; + const int spareRoom; // 10Kb extra room to avoid frequent resizing +}; + +#endif |