/**
|
|
* @file string_builder.h
|
|
* @author n0m1s
|
|
*/
|
|
#ifndef STRING_BUILDER_H
|
|
#define STRING_BUILDER_H
|
|
|
|
/**
|
|
* @brief Object used to create string by appending chars without re-allocations
|
|
*/
|
|
class StringBuilder
|
|
{
|
|
public:
|
|
StringBuilder();
|
|
~StringBuilder();
|
|
|
|
/**
|
|
* @brief empties everything and go back to an empty string
|
|
*/
|
|
void clear();
|
|
|
|
/**
|
|
* @return true if this is empty
|
|
*/
|
|
bool empty() const;
|
|
|
|
/**
|
|
* @brief appends a character
|
|
*/
|
|
void append(char const c);
|
|
inline void operator += (char const c) {this-> append(c);}
|
|
|
|
/**
|
|
* @brief get the string
|
|
*
|
|
* @return a dynamically allocated string (be sure to delete it afterwards)
|
|
*/
|
|
char* to_string() const;
|
|
|
|
protected:
|
|
/**
|
|
* @brief Class used to simulate a std::forward_list
|
|
*/
|
|
class Node
|
|
{
|
|
public:
|
|
Node(Node* next, char c);
|
|
~Node();
|
|
|
|
inline char getChar() const {return m_c;}
|
|
inline Node const* next() const {return m_next;}
|
|
|
|
protected:
|
|
Node* m_next;
|
|
char m_c;
|
|
};
|
|
|
|
protected:
|
|
unsigned int m_size;
|
|
Node * m_front;
|
|
};
|
|
|
|
#endif //STRING_BUILDER_H
|