Dev:charbuf

charbuf - C++ class for built-in strings

Synopsis
template class charbuf { private: char buffer[size]; public: charbuf (void); charbuf (const char *s); ~charbuf (void); size_t get_size(void); size_t get_length(void); char *get_string(void); char* erase(void); char* copy_to(char *s); char* copy_from(const char *s); operator char*(void); bool operator ==(const char *s); bool operator <(const char *s); bool operator <(const char *s); bool operator <=(const char *s); bool operator >=(const char *s); char *find(const char c); char *find(const char *s); char *findrev(const char c); char *token(char *from, const char *delim, char **context); size_t format(char *fmt, ...); size_t vformat(char *fmt, va_list ptr); }; typedef charbuf char1024; typedef charbuf char256; typedef charbuf <33> char32; typedef charbuf <9> char8;

Remarks
This template is used to implement the C++ classes for the string built-in types.

copy_from
Copies data from a string into the buffer.

copy_to
Copies data to a string from the buffer.

erase
Erases the buffer.

find
Finds a character or string in the buffer.

findrev
Find a character in the buffer starting from the end.

format
Formats the buffer using printf syntax.

get_size
Gets the size of the buffer.

get_length
Gets the length of the string in the buffer.

get_string
Gets a pointer to the string in the buffer.

operator char*
Casts to a char* type, which effectively gets a pointer to the string in the buffer.

operator
=== True is the string and the buffer are identical.

operator <
True if the buffer is alphabetically before the string.

operator >
True if the buffer is alphabetically after the string.

operator <=
True if the buffer is alphabetically before or the same as the string.

operator >=
True if the buffer is alphabetically after or the same as the string.

token
Find the first (or next) instance of a delimited string in the buffer.

vformat
Formats the string using vprintf syntax.

Caveat
You cannot rely on C++ compiler to automatically convert from the charbuf class to a string when using variable argument functions. This is a very insidious problem for certain compilers. In the absence of a cast or function that returns a char*, the compiler will either copy the entire buffer onto the stack (which is not what is usually expected) or reject the statement as an error due to the lack of a copy constructor. Therefore instead of

printf("%s", member );

you should use either

printf("%s",(const char*)member);

or

printf("%s",member.get_string);