core/sm_memtable.h
author David Anderson <dvander@alliedmods.net>
Wed Jan 17 06:49:59 2007 +0000 (2007-01-17)
changeset 308 f0e65f92cb34
parent 293 83b5a2d33e3d
child 370 d3a484f98f6d
permissions -rw-r--r--
Redesigned how server commands work. The "plugins" command will be back soon.
dvander@203
     1
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
     2
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
dvander@203
     3
dvander@203
     4
class BaseMemTable
dvander@203
     5
{
dvander@203
     6
public:
dvander@203
     7
	BaseMemTable(unsigned int init_size);
dvander@203
     8
	~BaseMemTable();
dvander@203
     9
public:
dvander@203
    10
	/**
dvander@203
    11
	 * Allocates 'size' bytes of memory.
dvander@203
    12
	 * Optionally outputs the address through 'addr'.
dvander@203
    13
	 * Returns an index >= 0 on success, < 0 on failure.
dvander@203
    14
	 */
dvander@203
    15
	int CreateMem(unsigned int size, void **addr);
dvander@203
    16
dvander@203
    17
	/**
dvander@203
    18
	 * Given an index into the memory table, returns its address.
dvander@203
    19
	 * Returns NULL if invalid.
dvander@203
    20
	 */
dvander@203
    21
	void *GetAddress(int index);
dvander@203
    22
dvander@203
    23
	/**
dvander@203
    24
	 * Scraps the memory table.  For caching purposes, the memory 
dvander@203
    25
	 * is not freed, however subsequent calls to CreateMem() will 
dvander@203
    26
	 * begin at the first index again.
dvander@203
    27
	 */
dvander@203
    28
	void Reset();
dvander@203
    29
private:
dvander@203
    30
	unsigned char *membase;
dvander@203
    31
	unsigned int size;
dvander@203
    32
	unsigned int tail;
dvander@203
    33
};
dvander@203
    34
dvander@203
    35
class BaseStringTable
dvander@203
    36
{
dvander@203
    37
public:
dvander@203
    38
	BaseStringTable(unsigned int init_size);
dvander@203
    39
	~BaseStringTable();
dvander@203
    40
public:
dvander@203
    41
	/** 
dvander@203
    42
	 * Adds a string to the string table and returns its index.
dvander@203
    43
	 */
dvander@203
    44
	int AddString(const char *string);
dvander@203
    45
dvander@203
    46
	/**
dvander@203
    47
	 * Given an index into the string table, returns the associated string.
dvander@203
    48
	 */
dvander@293
    49
	inline const char *GetString(int str)
dvander@293
    50
	{
dvander@293
    51
		return (const char *)m_table.GetAddress(str);
dvander@293
    52
	}
dvander@203
    53
dvander@203
    54
	/**
dvander@203
    55
	 * Scraps the string table.  For caching purposes, the memory
dvander@203
    56
	 * is not freed, however subsequent calls to AddString() will 
dvander@203
    57
	 * begin at the first index again.
dvander@203
    58
	 */
dvander@203
    59
	void Reset();
dvander@203
    60
dvander@203
    61
	/**
dvander@203
    62
	 * Returns the parent BaseMemTable that this string table uses.
dvander@203
    63
	 */
dvander@203
    64
	inline BaseMemTable *GetMemTable()
dvander@203
    65
	{
dvander@203
    66
		return &m_table;
dvander@203
    67
	}
dvander@203
    68
private:
dvander@203
    69
	BaseMemTable m_table;
dvander@203
    70
};
dvander@203
    71
dvander@203
    72
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_