core/sm_memtable.cpp
author David Anderson <dvander@alliedmods.net>
Wed May 02 22:35:51 2007 +0000 (2007-05-02)
changeset 727 fade10824d88
parent 653 ef60870067ff
child 1231 17badaf66ce4
permissions -rw-r--r--
attempted fix for amb243, timers now simulate ticks if gameframe doesn't give changed curtimes
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
}