dvander@370: /** dvander@370: * =============================================================== dvander@370: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@370: * =============================================================== dvander@370: * dvander@370: * This file is not open source and may not be copied without explicit dvander@370: * written permission of AlliedModders LLC. This file may not be redistributed dvander@370: * in whole or significant part. dvander@370: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@370: * dvander@370: * Version: $Id$ dvander@370: */ dvander@370: dvander@203: #ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ dvander@203: #define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ dvander@203: dvander@203: class BaseMemTable dvander@203: { dvander@203: public: dvander@203: BaseMemTable(unsigned int init_size); dvander@203: ~BaseMemTable(); dvander@203: public: dvander@203: /** dvander@203: * Allocates 'size' bytes of memory. dvander@203: * Optionally outputs the address through 'addr'. dvander@203: * Returns an index >= 0 on success, < 0 on failure. dvander@203: */ dvander@203: int CreateMem(unsigned int size, void **addr); dvander@203: dvander@203: /** dvander@203: * Given an index into the memory table, returns its address. dvander@203: * Returns NULL if invalid. dvander@203: */ dvander@203: void *GetAddress(int index); dvander@203: dvander@203: /** dvander@203: * Scraps the memory table. For caching purposes, the memory dvander@203: * is not freed, however subsequent calls to CreateMem() will dvander@203: * begin at the first index again. dvander@203: */ dvander@203: void Reset(); dvander@404: dvander@404: dvander@203: private: dvander@203: unsigned char *membase; dvander@203: unsigned int size; dvander@203: unsigned int tail; dvander@203: }; dvander@203: dvander@203: class BaseStringTable dvander@203: { dvander@203: public: dvander@203: BaseStringTable(unsigned int init_size); dvander@203: ~BaseStringTable(); dvander@203: public: dvander@203: /** dvander@203: * Adds a string to the string table and returns its index. dvander@203: */ dvander@203: int AddString(const char *string); dvander@203: dvander@203: /** dvander@203: * Given an index into the string table, returns the associated string. dvander@203: */ dvander@293: inline const char *GetString(int str) dvander@293: { dvander@293: return (const char *)m_table.GetAddress(str); dvander@293: } dvander@203: dvander@203: /** dvander@203: * Scraps the string table. For caching purposes, the memory dvander@203: * is not freed, however subsequent calls to AddString() will dvander@203: * begin at the first index again. dvander@203: */ dvander@203: void Reset(); dvander@203: dvander@203: /** dvander@203: * Returns the parent BaseMemTable that this string table uses. dvander@203: */ dvander@203: inline BaseMemTable *GetMemTable() dvander@203: { dvander@203: return &m_table; dvander@203: } dvander@203: private: dvander@203: BaseMemTable m_table; dvander@203: }; dvander@203: dvander@203: #endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_