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 +}