diff options
Diffstat (limited to 'src/base/tl/string.h')
| -rw-r--r-- | src/base/tl/string.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/base/tl/string.h b/src/base/tl/string.h new file mode 100644 index 00000000..155ca2a4 --- /dev/null +++ b/src/base/tl/string.h @@ -0,0 +1,68 @@ +#ifndef TL_FILE_STRING_HPP +#define TL_FILE_STRING_HPP + +#include "base.h" +#include "allocator.h" + +template<class ALLOCATOR > +class string_base : private ALLOCATOR +{ + char *str; + int length; + + void reset() + { + str = 0; length = 0; + } + + void free() + { + ALLOCATOR::free_array(str); + reset(); + } + + void copy(const char *other_str, int other_length) + { + length = other_length; + str = ALLOCATOR::alloc_array(length+1); + mem_copy(str, other_str, length+1); + } + + void copy(const string_base &other) + { + if(!other.str) + return; + copy(other.str, other.length); + } + +public: + string_base() { reset(); } + string_base(const char *other_str) { copy(other_str, str_length(other_str)); } + string_base(const string_base &other) { reset(); copy(other); } + ~string_base() { free(); } + + string_base &operator = (const char *other) + { + free(); + if(other) + copy(other, str_length(other)); + return *this; + } + + string_base &operator = (const string_base &other) + { + free(); + copy(other); + return *this; + } + + bool operator < (const char *other_str) const { return str_comp(str, other_str) < 0; } + operator const char *() const { return str; } + + const char *cstr() const { return str; } +}; + +/* normal allocated string */ +typedef string_base<allocator_default<char> > string; + +#endif // TL_FILE_STRING_HPP |