1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#ifndef cbuffer_t_h
#define cbuffer_t_h
/**
* A character buffer. Main operation is 'append'
* @author Hj. Malthaner
*/
class cbuffer_t
{
private:
unsigned int capacity;
/**
* Number of characters without(!) trailing '\0'
* @author Hj. Malthaner
*/
unsigned int size;
char * buf;
/**
* Implementation for copy constructor and copy assignment operator
* @author Timothy Baldock <tb@entropy.me.uk>
*/
void copy (const cbuffer_t& cbx);
/**
* Implementation for destructor and copy assignment operator
* @author Timothy Baldock <tb@entropy.me.uk>
*/
void free ();
public:
/**
* Number of characters without(!) trailing '\0'
* @author Hj. Malthaner
*/
int len() const { return size; }
/**
* Creates a new cbuffer with capacity cap
*/
cbuffer_t();
~cbuffer_t();
/**
* Copy constructor
* @author Timothy Baldock <tb@entropy.me.uk>
*/
cbuffer_t (const cbuffer_t& cbx);
/**
* Copy assignment operator
* @author Timothy Baldock <tb@entropy.me.uk>
*/
cbuffer_t& operator= (const cbuffer_t& cbx);
/**
* Clears the buffer
* @author Hj. Malthaner
*/
void clear();
/**
* Appends text. Buffer will be extended if it does not have enough capacity.
* @author Hj. Malthaner
*/
void append(const char * text);
/**
* Appends text, at most n characters worth. Buffer will be extended if needed.
* maxchars should NOT include the null at the end of the string!
* (e.g. it should be equivalent to the output of strlen())
* @author Timothy Baldock <tb@entropy.me.uk>
*/
void append (const char* text, size_t maxchars);
/**
* Return contents of buffer
* @author Timothy Baldock <tb@entropy.me.uk>
*/
const char* get_str () const;
/**
* Appends a number. Buffer will be extended if it does not have enough capacity.
* @author Hj. Malthaner
*/
void append(double n, int precision);
/* Append formatted text to the buffer */
void printf(const char* fmt, ...);
/* enlarge the buffer if needed (i.e. size+by_amount larger than capacity) */
void extend(unsigned int by_amount);
/**
* Automagic conversion to a const char* for backwards compatibility
* @author Hj. Malthaner
*/
operator const char *() const {return buf;}
};
#endif
|