extensions/sqlite/sm_memtable.cpp
author Scott Ehlert <ds@alliedmods.net>
Sun Mar 30 07:00:22 2008 +0000 (2008-03-30)
changeset 1952 b7aa2b626807
permissions -rw-r--r--
Spring Cleaning, Part Ichi (1)
Various minor things done to project files
Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way)
Updated regex project file and makefile
ds@1952
     1
/**
ds@1952
     2
 * vim: set ts=4 :
ds@1952
     3
 * =============================================================================
ds@1952
     4
 * SourceMod
ds@1952
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
ds@1952
     6
 * =============================================================================
ds@1952
     7
 *
ds@1952
     8
 * This program is free software; you can redistribute it and/or modify it under
ds@1952
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1952
    10
 * Free Software Foundation.
ds@1952
    11
 * 
ds@1952
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1952
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1952
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1952
    15
 * details.
ds@1952
    16
 *
ds@1952
    17
 * You should have received a copy of the GNU General Public License along with
ds@1952
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ds@1952
    19
 *
ds@1952
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1952
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1952
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1952
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1952
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1952
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1952
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1952
    27
 * or <http://www.sourcemod.net/license.php>.
ds@1952
    28
 *
ds@1952
    29
 * Version: $Id$
ds@1952
    30
 */
ds@1952
    31
ds@1952
    32
#include <string.h>
ds@1952
    33
#include <malloc.h>
ds@1952
    34
#include "sm_memtable.h"
ds@1952
    35
ds@1952
    36
BaseMemTable::BaseMemTable(unsigned int init_size)
ds@1952
    37
{
ds@1952
    38
	membase = (unsigned char *)malloc(init_size);
ds@1952
    39
	size = init_size;
ds@1952
    40
	tail = 0;
ds@1952
    41
}
ds@1952
    42
ds@1952
    43
BaseMemTable::~BaseMemTable()
ds@1952
    44
{
ds@1952
    45
	free(membase);
ds@1952
    46
	membase = NULL;
ds@1952
    47
}
ds@1952
    48
ds@1952
    49
int BaseMemTable::CreateMem(unsigned int addsize, void **addr)
ds@1952
    50
{
ds@1952
    51
	int idx = (int)tail;
ds@1952
    52
ds@1952
    53
	while (tail + addsize >= size)
ds@1952
    54
	{
ds@1952
    55
		size *= 2;
ds@1952
    56
		membase = (unsigned char *)realloc(membase, size);
ds@1952
    57
	}
ds@1952
    58
ds@1952
    59
	tail += addsize;
ds@1952
    60
ds@1952
    61
	if (addr)
ds@1952
    62
	{
ds@1952
    63
		*addr = (void *)&membase[idx];
ds@1952
    64
	}
ds@1952
    65
ds@1952
    66
	return idx;
ds@1952
    67
}
ds@1952
    68
ds@1952
    69
void *BaseMemTable::GetAddress(int index)
ds@1952
    70
{
ds@1952
    71
	if (index < 0 || (unsigned int)index >= tail)
ds@1952
    72
	{
ds@1952
    73
		return NULL;
ds@1952
    74
	}
ds@1952
    75
ds@1952
    76
	return &membase[index];
ds@1952
    77
}
ds@1952
    78
ds@1952
    79
void BaseMemTable::Reset()
ds@1952
    80
{
ds@1952
    81
	tail = 0;
ds@1952
    82
}
ds@1952
    83
ds@1952
    84
BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size)
ds@1952
    85
{
ds@1952
    86
}
ds@1952
    87
ds@1952
    88
BaseStringTable::~BaseStringTable()
ds@1952
    89
{
ds@1952
    90
}
ds@1952
    91
ds@1952
    92
int BaseStringTable::AddString(const char *string)
ds@1952
    93
{
ds@1952
    94
	size_t len = strlen(string) + 1;
ds@1952
    95
	int idx;
ds@1952
    96
	char *addr;
ds@1952
    97
ds@1952
    98
	idx = m_table.CreateMem(len, (void **)&addr);
ds@1952
    99
	strcpy(addr, string);
ds@1952
   100
ds@1952
   101
	return idx;
ds@1952
   102
}
ds@1952
   103
ds@1952
   104
/*const char *BaseStringTable::GetString(int str)
ds@1952
   105
{
ds@1952
   106
	return (const char *)m_table.GetAddress(str);
ds@1952
   107
}*/
ds@1952
   108
ds@1952
   109
void BaseStringTable::Reset()
ds@1952
   110
{
ds@1952
   111
	m_table.Reset();
ds@1952
   112
}