blob: a972f327c0dbe3a387d048584293b19d2c161c23 (
plain) (
blame)
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
|
#pragma once
#include "foundation/error.h"
#include <stdlib.h>
/* an automatically growing buffer */
class AutoBuffer
{
public:
AutoBuffer()
{
buffer=0;
buffer_length=0;
}
~AutoBuffer()
{
free(buffer);
}
operator void *()
{
return buffer;
}
template <class ptr_t>
ptr_t Get()
{
return (ptr_t)buffer;
}
int Reserve(size_t new_size)
{
if (new_size <= buffer_length)
return NErr_Success;
void *new_buffer = realloc(buffer, new_size);
if (!new_buffer)
return NErr_OutOfMemory;
buffer = new_buffer;
buffer_length = new_size;
return NErr_Success;
}
private:
void *buffer;
size_t buffer_length;
};
|