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