From 721dae38920453145f137fb9d87240c68c7d2bce Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 14 May 2010 19:43:38 -0700 Subject: [PATCH] Inline sm_memtable (bug 4406 part 5, r=ds). --- core/AMBuilder | 1 - core/Makefile | 2 +- core/sm_memtable.cpp | 112 ------------------------------------------- core/sm_memtable.h | 67 ++++++++++++++++++++++---- 4 files changed, 59 insertions(+), 123 deletions(-) delete mode 100644 core/sm_memtable.cpp diff --git a/core/AMBuilder b/core/AMBuilder index 0f2ed3f4..412e990b 100644 --- a/core/AMBuilder +++ b/core/AMBuilder @@ -23,7 +23,6 @@ for i in SM.sdkInfo: 'ADTFactory.cpp', 'ForwardSys.cpp', 'MenuVoting.cpp', - 'sm_memtable.cpp', 'smn_events.cpp', 'smn_menus.cpp', 'sm_trie.cpp', diff --git a/core/Makefile b/core/Makefile index 155d4c31..22fcbb79 100644 --- a/core/Makefile +++ b/core/Makefile @@ -17,7 +17,7 @@ MMSOURCE17 = ../../mmsource-central OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreConfig.cpp \ Database.cpp DebugReporter.cpp EventManager.cpp GameConfigs.cpp HalfLife2.cpp Logger.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 \ MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp \ frame_hooks.cpp concmd_cleaner.cpp PhraseCollection.cpp NextMap.cpp \ diff --git a/core/sm_memtable.cpp b/core/sm_memtable.cpp deleted file mode 100644 index e13cd891..00000000 --- a/core/sm_memtable.cpp +++ /dev/null @@ -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 . - * - * 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 . - * - * Version: $Id$ - */ - -#include -#include -#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(); -} diff --git a/core/sm_memtable.h b/core/sm_memtable.h index 2db4c4e6..8789e68e 100644 --- a/core/sm_memtable.h +++ b/core/sm_memtable.h @@ -32,31 +32,65 @@ #ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ #define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ +#include +#include + class BaseMemTable { public: - BaseMemTable(unsigned int init_size); - ~BaseMemTable(); + BaseMemTable(unsigned int init_size) + { + membase = (unsigned char *)malloc(init_size); + size = init_size; + tail = 0; + } + ~BaseMemTable() + { + free(membase); + membase = NULL; + } public: /** * Allocates 'size' bytes of memory. * Optionally outputs the address through 'addr'. * 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. * 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 * is not freed, however subsequent calls to CreateMem() will * begin at the first index again. */ - void Reset(); + void Reset() + { + tail = 0; + } inline unsigned int GetMemUsage() { @@ -77,13 +111,24 @@ private: class BaseStringTable { public: - BaseStringTable(unsigned int init_size); - ~BaseStringTable(); + BaseStringTable(unsigned int init_size) : m_table(init_size) + { + } public: /** * 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. @@ -98,7 +143,10 @@ public: * is not freed, however subsequent calls to AddString() will * begin at the first index again. */ - void Reset(); + void Reset() + { + m_table.Reset(); + } /** * Returns the parent BaseMemTable that this string table uses. @@ -112,3 +160,4 @@ private: }; #endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ +