blob: 155ca2a46936322950b03181272c1b28ba398412 (
plain)
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
|
#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
|