Inline sm_memtable (bug 4406 part 5, r=ds).
This commit is contained in:
parent
1cdacf69be
commit
721dae3892
@ -23,7 +23,6 @@ for i in SM.sdkInfo:
|
|||||||
'ADTFactory.cpp',
|
'ADTFactory.cpp',
|
||||||
'ForwardSys.cpp',
|
'ForwardSys.cpp',
|
||||||
'MenuVoting.cpp',
|
'MenuVoting.cpp',
|
||||||
'sm_memtable.cpp',
|
|
||||||
'smn_events.cpp',
|
'smn_events.cpp',
|
||||||
'smn_menus.cpp',
|
'smn_menus.cpp',
|
||||||
'sm_trie.cpp',
|
'sm_trie.cpp',
|
||||||
|
@ -17,7 +17,7 @@ MMSOURCE17 = ../../mmsource-central
|
|||||||
OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \
|
OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \
|
||||||
Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \
|
Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.cpp \
|
||||||
PlayerManager.cpp TimerSys.cpp Translator.cpp UserMessages.cpp \
|
PlayerManager.cpp TimerSys.cpp Translator.cpp UserMessages.cpp \
|
||||||
sm_autonatives.cpp sm_memtable.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \
|
sm_autonatives.cpp sm_srvcmds.cpp sm_stringutil.cpp sm_trie.cpp \
|
||||||
sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \
|
sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \
|
||||||
MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp \
|
MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp \
|
||||||
frame_hooks.cpp concmd_cleaner.cpp PhraseCollection.cpp NextMap.cpp \
|
frame_hooks.cpp concmd_cleaner.cpp PhraseCollection.cpp NextMap.cpp \
|
||||||
|
@ -1,112 +0,0 @@
|
|||||||
/**
|
|
||||||
* vim: set ts=4 :
|
|
||||||
* =============================================================================
|
|
||||||
* SourceMod
|
|
||||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
|
||||||
* =============================================================================
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
|
||||||
* Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
|
||||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
|
||||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
|
||||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
|
||||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
|
||||||
* this exception to all derivative works. AlliedModders LLC defines further
|
|
||||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
|
||||||
* or <http://www.sourcemod.net/license.php>.
|
|
||||||
*
|
|
||||||
* Version: $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "sm_memtable.h"
|
|
||||||
|
|
||||||
BaseMemTable::BaseMemTable(unsigned int init_size)
|
|
||||||
{
|
|
||||||
membase = (unsigned char *)malloc(init_size);
|
|
||||||
size = init_size;
|
|
||||||
tail = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseMemTable::~BaseMemTable()
|
|
||||||
{
|
|
||||||
free(membase);
|
|
||||||
membase = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BaseMemTable::CreateMem(unsigned int addsize, void **addr)
|
|
||||||
{
|
|
||||||
int idx = (int)tail;
|
|
||||||
|
|
||||||
while (tail + addsize >= size)
|
|
||||||
{
|
|
||||||
size *= 2;
|
|
||||||
membase = (unsigned char *)realloc(membase, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
tail += addsize;
|
|
||||||
|
|
||||||
if (addr)
|
|
||||||
{
|
|
||||||
*addr = (void *)&membase[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *BaseMemTable::GetAddress(int index)
|
|
||||||
{
|
|
||||||
if (index < 0 || (unsigned int)index >= tail)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return &membase[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseMemTable::Reset()
|
|
||||||
{
|
|
||||||
tail = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseStringTable::~BaseStringTable()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int BaseStringTable::AddString(const char *string)
|
|
||||||
{
|
|
||||||
size_t len = strlen(string) + 1;
|
|
||||||
int idx;
|
|
||||||
char *addr;
|
|
||||||
|
|
||||||
idx = m_table.CreateMem(len, (void **)&addr);
|
|
||||||
strcpy(addr, string);
|
|
||||||
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*const char *BaseStringTable::GetString(int str)
|
|
||||||
{
|
|
||||||
return (const char *)m_table.GetAddress(str);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void BaseStringTable::Reset()
|
|
||||||
{
|
|
||||||
m_table.Reset();
|
|
||||||
}
|
|
@ -32,31 +32,65 @@
|
|||||||
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
#ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
||||||
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
#define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
class BaseMemTable
|
class BaseMemTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BaseMemTable(unsigned int init_size);
|
BaseMemTable(unsigned int init_size)
|
||||||
~BaseMemTable();
|
{
|
||||||
|
membase = (unsigned char *)malloc(init_size);
|
||||||
|
size = init_size;
|
||||||
|
tail = 0;
|
||||||
|
}
|
||||||
|
~BaseMemTable()
|
||||||
|
{
|
||||||
|
free(membase);
|
||||||
|
membase = NULL;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Allocates 'size' bytes of memory.
|
* Allocates 'size' bytes of memory.
|
||||||
* Optionally outputs the address through 'addr'.
|
* Optionally outputs the address through 'addr'.
|
||||||
* Returns an index >= 0 on success, < 0 on failure.
|
* Returns an index >= 0 on success, < 0 on failure.
|
||||||
*/
|
*/
|
||||||
int CreateMem(unsigned int size, void **addr);
|
int CreateMem(unsigned int addsize, void **addr)
|
||||||
|
{
|
||||||
|
int idx = (int)tail;
|
||||||
|
|
||||||
|
while (tail + addsize >= size) {
|
||||||
|
size *= 2;
|
||||||
|
membase = (unsigned char *)realloc(membase, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
tail += addsize;
|
||||||
|
if (addr)
|
||||||
|
*addr = (void *)&membase[idx];
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given an index into the memory table, returns its address.
|
* Given an index into the memory table, returns its address.
|
||||||
* Returns NULL if invalid.
|
* Returns NULL if invalid.
|
||||||
*/
|
*/
|
||||||
void *GetAddress(int index);
|
void *GetAddress(int index)
|
||||||
|
{
|
||||||
|
if (index < 0 || (unsigned int)index >= tail)
|
||||||
|
return NULL;
|
||||||
|
return &membase[index];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scraps the memory table. For caching purposes, the memory
|
* Scraps the memory table. For caching purposes, the memory
|
||||||
* is not freed, however subsequent calls to CreateMem() will
|
* is not freed, however subsequent calls to CreateMem() will
|
||||||
* begin at the first index again.
|
* begin at the first index again.
|
||||||
*/
|
*/
|
||||||
void Reset();
|
void Reset()
|
||||||
|
{
|
||||||
|
tail = 0;
|
||||||
|
}
|
||||||
|
|
||||||
inline unsigned int GetMemUsage()
|
inline unsigned int GetMemUsage()
|
||||||
{
|
{
|
||||||
@ -77,13 +111,24 @@ private:
|
|||||||
class BaseStringTable
|
class BaseStringTable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BaseStringTable(unsigned int init_size);
|
BaseStringTable(unsigned int init_size) : m_table(init_size)
|
||||||
~BaseStringTable();
|
{
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Adds a string to the string table and returns its index.
|
* Adds a string to the string table and returns its index.
|
||||||
*/
|
*/
|
||||||
int AddString(const char *string);
|
int AddString(const char *string)
|
||||||
|
{
|
||||||
|
size_t len = strlen(string) + 1;
|
||||||
|
int idx;
|
||||||
|
char *addr;
|
||||||
|
|
||||||
|
idx = m_table.CreateMem(len, (void **)&addr);
|
||||||
|
strcpy(addr, string);
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given an index into the string table, returns the associated string.
|
* Given an index into the string table, returns the associated string.
|
||||||
@ -98,7 +143,10 @@ public:
|
|||||||
* is not freed, however subsequent calls to AddString() will
|
* is not freed, however subsequent calls to AddString() will
|
||||||
* begin at the first index again.
|
* begin at the first index again.
|
||||||
*/
|
*/
|
||||||
void Reset();
|
void Reset()
|
||||||
|
{
|
||||||
|
m_table.Reset();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the parent BaseMemTable that this string table uses.
|
* Returns the parent BaseMemTable that this string table uses.
|
||||||
@ -112,3 +160,4 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
#endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user