| author | David Anderson <dvander@alliedmods.net> |
| Sun Jun 17 07:32:31 2007 +0000 (2007-06-17) | |
| changeset 969 | 0cd7fc27e054 |
| parent 653 | ef60870067ff |
| child 1231 | 17badaf66ce4 |
| permissions | -rw-r--r-- |
| dvander@370 | 1 |
/** |
| ds@653 | 2 |
* vim: set ts=4 : |
| dvander@370 | 3 |
* =============================================================== |
| dvander@370 | 4 |
* SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. |
| dvander@370 | 5 |
* =============================================================== |
| dvander@370 | 6 |
* |
| dvander@370 | 7 |
* This file is not open source and may not be copied without explicit |
| dvander@370 | 8 |
* written permission of AlliedModders LLC. This file may not be redistributed |
| dvander@370 | 9 |
* in whole or significant part. |
| dvander@370 | 10 |
* For information, see LICENSE.txt or http://www.sourcemod.net/license.php |
| dvander@370 | 11 |
* |
| dvander@370 | 12 |
* Version: $Id$ |
| dvander@370 | 13 |
*/ |
| dvander@370 | 14 |
|
| dvander@203 | 15 |
#include <string.h> |
| dvander@203 | 16 |
#include <malloc.h> |
| dvander@203 | 17 |
#include "sm_memtable.h" |
| dvander@203 | 18 |
|
| dvander@203 | 19 |
BaseMemTable::BaseMemTable(unsigned int init_size) |
| dvander@203 | 20 |
{ |
| dvander@203 | 21 |
membase = (unsigned char *)malloc(init_size); |
| dvander@203 | 22 |
size = init_size; |
| dvander@204 | 23 |
tail = 0; |
| dvander@203 | 24 |
} |
| dvander@203 | 25 |
|
| dvander@203 | 26 |
BaseMemTable::~BaseMemTable() |
| dvander@203 | 27 |
{ |
| dvander@203 | 28 |
free(membase); |
| dvander@203 | 29 |
membase = NULL; |
| dvander@203 | 30 |
} |
| dvander@203 | 31 |
|
| dvander@203 | 32 |
int BaseMemTable::CreateMem(unsigned int addsize, void **addr) |
| dvander@203 | 33 |
{ |
| dvander@203 | 34 |
int idx = (int)tail; |
| dvander@203 | 35 |
|
| dvander@203 | 36 |
while (tail + addsize >= size) |
| dvander@203 | 37 |
{ |
| dvander@203 | 38 |
size *= 2; |
| dvander@203 | 39 |
membase = (unsigned char *)realloc(membase, size); |
| dvander@203 | 40 |
} |
| dvander@203 | 41 |
|
| dvander@203 | 42 |
tail += addsize; |
| dvander@203 | 43 |
|
| dvander@203 | 44 |
if (addr) |
| dvander@203 | 45 |
{ |
| dvander@203 | 46 |
*addr = (void *)&membase[idx]; |
| dvander@203 | 47 |
} |
| dvander@203 | 48 |
|
| dvander@203 | 49 |
return idx; |
| dvander@203 | 50 |
} |
| dvander@203 | 51 |
|
| dvander@203 | 52 |
void *BaseMemTable::GetAddress(int index) |
| dvander@203 | 53 |
{ |
| dvander@203 | 54 |
if (index < 0 || (unsigned int)index >= tail) |
| dvander@203 | 55 |
{ |
| dvander@203 | 56 |
return NULL; |
| dvander@203 | 57 |
} |
| dvander@203 | 58 |
|
| dvander@203 | 59 |
return &membase[index]; |
| dvander@203 | 60 |
} |
| dvander@203 | 61 |
|
| dvander@203 | 62 |
void BaseMemTable::Reset() |
| dvander@203 | 63 |
{ |
| dvander@203 | 64 |
tail = 0; |
| dvander@203 | 65 |
} |
| dvander@203 | 66 |
|
| dvander@203 | 67 |
BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size) |
| dvander@203 | 68 |
{ |
| dvander@203 | 69 |
} |
| dvander@203 | 70 |
|
| dvander@203 | 71 |
BaseStringTable::~BaseStringTable() |
| dvander@203 | 72 |
{ |
| dvander@203 | 73 |
} |
| dvander@203 | 74 |
|
| dvander@203 | 75 |
int BaseStringTable::AddString(const char *string) |
| dvander@203 | 76 |
{ |
| dvander@203 | 77 |
size_t len = strlen(string) + 1; |
| dvander@203 | 78 |
int idx; |
| dvander@203 | 79 |
char *addr; |
| dvander@203 | 80 |
|
| dvander@203 | 81 |
idx = m_table.CreateMem(len, (void **)&addr); |
| dvander@203 | 82 |
strcpy(addr, string); |
| dvander@203 | 83 |
|
| dvander@203 | 84 |
return idx; |
| dvander@203 | 85 |
} |
| dvander@203 | 86 |
|
| dvander@293 | 87 |
/*const char *BaseStringTable::GetString(int str) |
| dvander@203 | 88 |
{ |
| dvander@203 | 89 |
return (const char *)m_table.GetAddress(str); |
| dvander@293 | 90 |
}*/ |
| dvander@203 | 91 |
|
| dvander@203 | 92 |
void BaseStringTable::Reset() |
| dvander@203 | 93 |
{ |
| dvander@203 | 94 |
m_table.Reset(); |
| dvander@203 | 95 |
} |