core/sm_memtable.h
author David Anderson <dvander@alliedmods.net>
Sun Jun 17 19:23:43 2007 +0000 (2007-06-17)
changeset 973 0407a17cb219
parent 653 ef60870067ff
child 1231 17badaf66ce4
permissions -rw-r--r--
fixed a bug where linux did not read dladdr() return value right for gameconfs
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
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
    16
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
    17
dvander@203
    18
class BaseMemTable
dvander@203
    19
{
dvander@203
    20
public:
dvander@203
    21
	BaseMemTable(unsigned int init_size);
dvander@203
    22
	~BaseMemTable();
dvander@203
    23
public:
dvander@203
    24
	/**
dvander@203
    25
	 * Allocates 'size' bytes of memory.
dvander@203
    26
	 * Optionally outputs the address through 'addr'.
dvander@203
    27
	 * Returns an index >= 0 on success, < 0 on failure.
dvander@203
    28
	 */
dvander@203
    29
	int CreateMem(unsigned int size, void **addr);
dvander@203
    30
dvander@203
    31
	/**
dvander@203
    32
	 * Given an index into the memory table, returns its address.
dvander@203
    33
	 * Returns NULL if invalid.
dvander@203
    34
	 */
dvander@203
    35
	void *GetAddress(int index);
dvander@203
    36
dvander@203
    37
	/**
dvander@203
    38
	 * Scraps the memory table.  For caching purposes, the memory 
dvander@203
    39
	 * is not freed, however subsequent calls to CreateMem() will 
dvander@203
    40
	 * begin at the first index again.
dvander@203
    41
	 */
dvander@203
    42
	void Reset();
dvander@404
    43
dvander@404
    44
dvander@203
    45
private:
dvander@203
    46
	unsigned char *membase;
dvander@203
    47
	unsigned int size;
dvander@203
    48
	unsigned int tail;
dvander@203
    49
};
dvander@203
    50
dvander@203
    51
class BaseStringTable
dvander@203
    52
{
dvander@203
    53
public:
dvander@203
    54
	BaseStringTable(unsigned int init_size);
dvander@203
    55
	~BaseStringTable();
dvander@203
    56
public:
dvander@203
    57
	/** 
dvander@203
    58
	 * Adds a string to the string table and returns its index.
dvander@203
    59
	 */
dvander@203
    60
	int AddString(const char *string);
dvander@203
    61
dvander@203
    62
	/**
dvander@203
    63
	 * Given an index into the string table, returns the associated string.
dvander@203
    64
	 */
dvander@293
    65
	inline const char *GetString(int str)
dvander@293
    66
	{
dvander@293
    67
		return (const char *)m_table.GetAddress(str);
dvander@293
    68
	}
dvander@203
    69
dvander@203
    70
	/**
dvander@203
    71
	 * Scraps the string table.  For caching purposes, the memory
dvander@203
    72
	 * is not freed, however subsequent calls to AddString() will 
dvander@203
    73
	 * begin at the first index again.
dvander@203
    74
	 */
dvander@203
    75
	void Reset();
dvander@203
    76
dvander@203
    77
	/**
dvander@203
    78
	 * Returns the parent BaseMemTable that this string table uses.
dvander@203
    79
	 */
dvander@203
    80
	inline BaseMemTable *GetMemTable()
dvander@203
    81
	{
dvander@203
    82
		return &m_table;
dvander@203
    83
	}
dvander@203
    84
private:
dvander@203
    85
	BaseMemTable m_table;
dvander@203
    86
};
dvander@203
    87
dvander@203
    88
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_