aboutsummaryrefslogtreecommitdiff
path: root/strbuf.cpp
blob: 7b63c58d8c9d216c795060af14f0e45261b5c491 (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
#include "strbuf.h"

#include <cstdlib>

strbuf::strbuf (const strbuf& other) {
	this->alloc = other.len + 1;
	this->mem = static_cast<char*>(malloc(this->alloc));
	strncpy(this->mem, other.mem, other.len);
}

void strbuf::realloc (size_t len) {
	this->mem = static_cast<char*>(std::realloc(this->mem, len));
	this->alloc = len;
}

strbuf::~strbuf() {
	free (this->mem);
	this->mem = NULL;
	this->alloc = 0;
	this->len = 0;
}

strbuf& strbuf::operator+=(char c) {
	if (this->len + 1 > this->alloc) {
		this->alloc <<= 1;
		this->mem = static_cast<char*> (std::realloc(this->mem, this->alloc));
	}

	this->mem[this->len] = c;
	this->ptr = ++this->len;
	return *this;
}