core/sm_memtable.cpp
changeset 203 c7f86f9e6f60
child 204 947d19d39772
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/core/sm_memtable.cpp	Sun Dec 10 09:19:59 2006 +0000
     1.3 @@ -0,0 +1,85 @@
     1.4 +#include <string.h>
     1.5 +#include <malloc.h>
     1.6 +#include "sm_memtable.h"
     1.7 +
     1.8 +BaseMemTable::BaseMemTable(unsigned int init_size)
     1.9 +{
    1.10 +	membase = (unsigned char *)malloc(init_size);
    1.11 +	size = init_size;
    1.12 +}
    1.13 +
    1.14 +BaseMemTable::~BaseMemTable()
    1.15 +{
    1.16 +	free(membase);
    1.17 +	membase = NULL;
    1.18 +}
    1.19 +
    1.20 +int BaseMemTable::CreateMem(unsigned int addsize, void **addr)
    1.21 +{
    1.22 +	int idx = (int)tail;
    1.23 +
    1.24 +	if (idx < 0)
    1.25 +	{
    1.26 +		return -1;
    1.27 +	}
    1.28 +
    1.29 +	while (tail + addsize >= size)
    1.30 +	{
    1.31 +		size *= 2;
    1.32 +		membase = (unsigned char *)realloc(membase, size);
    1.33 +	}
    1.34 +
    1.35 +	tail += addsize;
    1.36 +
    1.37 +	if (addr)
    1.38 +	{
    1.39 +		*addr = (void *)&membase[idx];
    1.40 +	}
    1.41 +
    1.42 +	return idx;
    1.43 +}
    1.44 +
    1.45 +void *BaseMemTable::GetAddress(int index)
    1.46 +{
    1.47 +	if (index < 0 || (unsigned int)index >= tail)
    1.48 +	{
    1.49 +		return NULL;
    1.50 +	}
    1.51 +
    1.52 +	return &membase[index];
    1.53 +}
    1.54 +
    1.55 +void BaseMemTable::Reset()
    1.56 +{
    1.57 +	tail = 0;
    1.58 +}
    1.59 +
    1.60 +BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size)
    1.61 +{
    1.62 +}
    1.63 +
    1.64 +BaseStringTable::~BaseStringTable()
    1.65 +{
    1.66 +}
    1.67 +
    1.68 +int BaseStringTable::AddString(const char *string)
    1.69 +{
    1.70 +	size_t len = strlen(string) + 1;
    1.71 +	int idx;
    1.72 +	char *addr;
    1.73 +
    1.74 +	idx = m_table.CreateMem(len, (void **)&addr);
    1.75 +	strcpy(addr, string);
    1.76 +
    1.77 +	return idx;
    1.78 +}
    1.79 +
    1.80 +const char *BaseStringTable::GetString(int str)
    1.81 +{
    1.82 +	return (const char *)m_table.GetAddress(str);
    1.83 +}
    1.84 +
    1.85 +void BaseStringTable::Reset()
    1.86 +{
    1.87 +	m_table.Reset();
    1.88 +}