| author | David Anderson <dvander@alliedmods.net> |
| Fri Feb 16 04:16:31 2007 +0000 (2007-02-16) | |
| changeset 502 | 4530ea065a8b |
| parent 404 | 673ccd0935ba |
| child 653 | ef60870067ff |
| permissions | -rw-r--r-- |
| 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_ |