core/sm_memtable.h
author Scott Ehlert <ds@alliedmods.net>
Thu Feb 08 21:41:28 2007 +0000 (2007-02-08)
changeset 457 9b8a85bf4175
parent 404 673ccd0935ba
child 653 ef60870067ff
permissions -rw-r--r--
Initial import of convar stuff
1) Natives to create, find, set, and get convars
2) "cvars" option added to sm menu
3) Some internal additions to CPlugin to store a convar list
Still some things left to do...
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
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
    15
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
    16
dvander@203
    17
class BaseMemTable
dvander@203
    18
{
dvander@203
    19
public:
dvander@203
    20
	BaseMemTable(unsigned int init_size);
dvander@203
    21
	~BaseMemTable();
dvander@203
    22
public:
dvander@203
    23
	/**
dvander@203
    24
	 * Allocates 'size' bytes of memory.
dvander@203
    25
	 * Optionally outputs the address through 'addr'.
dvander@203
    26
	 * Returns an index >= 0 on success, < 0 on failure.
dvander@203
    27
	 */
dvander@203
    28
	int CreateMem(unsigned int size, void **addr);
dvander@203
    29
dvander@203
    30
	/**
dvander@203
    31
	 * Given an index into the memory table, returns its address.
dvander@203
    32
	 * Returns NULL if invalid.
dvander@203
    33
	 */
dvander@203
    34
	void *GetAddress(int index);
dvander@203
    35
dvander@203
    36
	/**
dvander@203
    37
	 * Scraps the memory table.  For caching purposes, the memory 
dvander@203
    38
	 * is not freed, however subsequent calls to CreateMem() will 
dvander@203
    39
	 * begin at the first index again.
dvander@203
    40
	 */
dvander@203
    41
	void Reset();
dvander@404
    42
dvander@404
    43
dvander@203
    44
private:
dvander@203
    45
	unsigned char *membase;
dvander@203
    46
	unsigned int size;
dvander@203
    47
	unsigned int tail;
dvander@203
    48
};
dvander@203
    49
dvander@203
    50
class BaseStringTable
dvander@203
    51
{
dvander@203
    52
public:
dvander@203
    53
	BaseStringTable(unsigned int init_size);
dvander@203
    54
	~BaseStringTable();
dvander@203
    55
public:
dvander@203
    56
	/** 
dvander@203
    57
	 * Adds a string to the string table and returns its index.
dvander@203
    58
	 */
dvander@203
    59
	int AddString(const char *string);
dvander@203
    60
dvander@203
    61
	/**
dvander@203
    62
	 * Given an index into the string table, returns the associated string.
dvander@203
    63
	 */
dvander@293
    64
	inline const char *GetString(int str)
dvander@293
    65
	{
dvander@293
    66
		return (const char *)m_table.GetAddress(str);
dvander@293
    67
	}
dvander@203
    68
dvander@203
    69
	/**
dvander@203
    70
	 * Scraps the string table.  For caching purposes, the memory
dvander@203
    71
	 * is not freed, however subsequent calls to AddString() will 
dvander@203
    72
	 * begin at the first index again.
dvander@203
    73
	 */
dvander@203
    74
	void Reset();
dvander@203
    75
dvander@203
    76
	/**
dvander@203
    77
	 * Returns the parent BaseMemTable that this string table uses.
dvander@203
    78
	 */
dvander@203
    79
	inline BaseMemTable *GetMemTable()
dvander@203
    80
	{
dvander@203
    81
		return &m_table;
dvander@203
    82
	}
dvander@203
    83
private:
dvander@203
    84
	BaseMemTable m_table;
dvander@203
    85
};
dvander@203
    86
dvander@203
    87
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_