| 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-- |
| 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_ |