54 lines
983 B
C
Raw Normal View History

2025-01-22 16:18:30 +01:00
#ifndef HX_STRING_ALLOC
#define HX_STRING_ALLOC
#include <stdlib.h>
#include <stdint.h>
namespace hx
{
class IStringAlloc
{
public:
virtual void *allocBytes(size_t inBytes) = 0;
protected:
~IStringAlloc(){};
};
template<int STACK>
class StringAlloc : public IStringAlloc
{
char buffer[STACK];
size_t alloced;
char *heap;
public:
inline StringAlloc() : alloced(0), heap(0) { }
~StringAlloc()
{
if (heap)
free(heap);
}
void *allocBytes(size_t inBytes)
{
if (inBytes<=STACK)
return buffer;
if (inBytes>alloced)
{
alloced = inBytes;
heap = (char *)realloc(heap, alloced);
}
return heap;
}
private:
StringAlloc(const StringAlloc &);
void operator=(const StringAlloc &);
};
typedef StringAlloc<100> strbuf;
} // end namespace hx
#endif