Update sqlite module project files and use AMTL.
This commit is contained in:
parent
ab16be08f5
commit
3f6ad29f55
@ -9,7 +9,7 @@ binary.compiler.cxxincludes += [
|
|||||||
]
|
]
|
||||||
binary.compiler.defines += [
|
binary.compiler.defines += [
|
||||||
'SM_DEFAULT_THREADER',
|
'SM_DEFAULT_THREADER',
|
||||||
'stricmp=strcasecmp',
|
'HAVE_STDINT_H',
|
||||||
]
|
]
|
||||||
|
|
||||||
if builder.target_platform == 'linux':
|
if builder.target_platform == 'linux':
|
||||||
@ -20,7 +20,7 @@ binary.sources += [
|
|||||||
'handles.cpp',
|
'handles.cpp',
|
||||||
'module.cpp',
|
'module.cpp',
|
||||||
'threading.cpp',
|
'threading.cpp',
|
||||||
'sdk/amxxmodule.cpp',
|
'../../public/sdk/amxxmodule.cpp',
|
||||||
'oldcompat_sql.cpp',
|
'oldcompat_sql.cpp',
|
||||||
'thread/BaseWorker.cpp',
|
'thread/BaseWorker.cpp',
|
||||||
'thread/ThreadWorker.cpp',
|
'thread/ThreadWorker.cpp',
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
HLSDK = ../../../hlsdk
|
HLSDK = ../../../hlsdk
|
||||||
MM_ROOT = ../../../metamod/metamod
|
MM_ROOT = ../../../metamod/metamod
|
||||||
|
PUBLIC_ROOT = ../../public
|
||||||
SQL = sqlite-source
|
SQL = sqlite-source
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
@ -15,7 +16,7 @@ SQL = sqlite-source
|
|||||||
|
|
||||||
PROJECT = sqlite
|
PROJECT = sqlite
|
||||||
|
|
||||||
OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp \
|
OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp amxxmodule.cpp oldcompat_sql.cpp \
|
||||||
thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \
|
thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \
|
||||||
sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp \
|
sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp \
|
||||||
sqlitepp/SqliteDriver.cpp
|
sqlitepp/SqliteDriver.cpp
|
||||||
@ -41,8 +42,10 @@ CPP_OSX = clang
|
|||||||
|
|
||||||
LINK =
|
LINK =
|
||||||
|
|
||||||
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
|
INCLUDE = -I. -I$(PUBLIC_ROOT) -I$(PUBLIC_ROOT)/sdk -I$(PUBLIC_ROOT)/amtl \
|
||||||
-I$(HLSDK)/public -I$(MM_ROOT) -I$(SQL) -Isqlitepp -Ithread -Isdk
|
-I$(HLSDK) -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/pm_shared\
|
||||||
|
-I$(SQL) -Isqlitepp -Ithread \
|
||||||
|
-I$(MM_ROOT)
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
||||||
@ -127,10 +130,10 @@ $(BIN_DIR)/%.o: %.c
|
|||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
mkdir -p $(BIN_DIR)/sdk
|
|
||||||
mkdir -p $(BIN_DIR)/thread
|
mkdir -p $(BIN_DIR)/thread
|
||||||
mkdir -p $(BIN_DIR)/sqlitepp
|
mkdir -p $(BIN_DIR)/sqlitepp
|
||||||
mkdir -p $(BIN_DIR)/$(SQL)
|
mkdir -p $(BIN_DIR)/$(SQL)
|
||||||
|
ln -sf $(PUBLIC_ROOT)/sdk/amxxmodule.cpp
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
||||||
|
|
||||||
$(PROJECT): $(OBJ_BIN)
|
$(PROJECT): $(OBJ_BIN)
|
||||||
@ -143,7 +146,6 @@ default: all
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BIN_DIR)/*.o
|
rm -rf $(BIN_DIR)/*.o
|
||||||
rm -rf $(BIN_DIR)/sdk/*.o
|
|
||||||
rm -rf $(BIN_DIR)/thread/*.o
|
rm -rf $(BIN_DIR)/thread/*.o
|
||||||
rm -rf $(BIN_DIR)/sqlitepp/*.o
|
rm -rf $(BIN_DIR)/sqlitepp/*.o
|
||||||
rm -rf $(BIN_DIR)/$(SQL)/*.o
|
rm -rf $(BIN_DIR)/$(SQL)/*.o
|
||||||
|
@ -16,9 +16,6 @@
|
|||||||
#include "sqlite_header.h"
|
#include "sqlite_header.h"
|
||||||
#include "sqlheaders.h"
|
#include "sqlheaders.h"
|
||||||
|
|
||||||
using namespace SourceMod;
|
|
||||||
using namespace SourceHook;
|
|
||||||
|
|
||||||
SqliteDriver g_Sqlite;
|
SqliteDriver g_Sqlite;
|
||||||
|
|
||||||
void FreeConnection(void *p, unsigned int num)
|
void FreeConnection(void *p, unsigned int num)
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "sh_stack.h"
|
#include <sh_stack.h>
|
||||||
#include "CVector.h"
|
#include <am-vector.h>
|
||||||
#include "sqlite_header.h"
|
#include "sqlite_header.h"
|
||||||
|
|
||||||
struct QHandle
|
struct QHandle
|
||||||
@ -24,7 +24,7 @@ struct QHandle
|
|||||||
bool isfree;
|
bool isfree;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVector<QHandle *> g_Handles;
|
ke::Vector<QHandle *> g_Handles;
|
||||||
CStack<unsigned int> g_FreeHandles;
|
CStack<unsigned int> g_FreeHandles;
|
||||||
|
|
||||||
unsigned int MakeHandle(void *ptr, HandleType type, FREEHANDLE f)
|
unsigned int MakeHandle(void *ptr, HandleType type, FREEHANDLE f)
|
||||||
@ -39,8 +39,8 @@ unsigned int MakeHandle(void *ptr, HandleType type, FREEHANDLE f)
|
|||||||
h = g_Handles[num];
|
h = g_Handles[num];
|
||||||
} else {
|
} else {
|
||||||
h = new QHandle;
|
h = new QHandle;
|
||||||
g_Handles.push_back(h);
|
g_Handles.append(h);
|
||||||
num = static_cast<unsigned int>(g_Handles.size()) - 1;
|
num = static_cast<unsigned int>(g_Handles.length()) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
h->_ptr = ptr;
|
h->_ptr = ptr;
|
||||||
@ -57,7 +57,7 @@ void *GetHandle(unsigned int num, HandleType type)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
num--;
|
num--;
|
||||||
if (num >= g_Handles.size())
|
if (num >= g_Handles.length())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
QHandle *h = g_Handles[num];
|
QHandle *h = g_Handles[num];
|
||||||
@ -75,7 +75,7 @@ bool FreeHandle(unsigned int num)
|
|||||||
unsigned int _num = num;
|
unsigned int _num = num;
|
||||||
|
|
||||||
num--;
|
num--;
|
||||||
if (num >= g_Handles.size())
|
if (num >= g_Handles.length())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QHandle *h = g_Handles[num];
|
QHandle *h = g_Handles[num];
|
||||||
@ -95,7 +95,7 @@ bool FreeHandle(unsigned int num)
|
|||||||
void FreeAllHandles(HandleType type)
|
void FreeAllHandles(HandleType type)
|
||||||
{
|
{
|
||||||
QHandle *q;
|
QHandle *q;
|
||||||
for (size_t i = 0; i < g_Handles.size(); i++)
|
for (size_t i = 0; i < g_Handles.length(); i++)
|
||||||
{
|
{
|
||||||
q = g_Handles[i];
|
q = g_Handles[i];
|
||||||
if (q && !q->isfree && q->type == type)
|
if (q && !q->isfree && q->type == type)
|
||||||
@ -108,7 +108,7 @@ void FreeAllHandles(HandleType type)
|
|||||||
void FreeHandleTable()
|
void FreeHandleTable()
|
||||||
{
|
{
|
||||||
QHandle *q;
|
QHandle *q;
|
||||||
for (size_t i = 0; i < g_Handles.size(); i++)
|
for (size_t i = 0; i < g_Handles.length(); i++)
|
||||||
{
|
{
|
||||||
q = g_Handles[i];
|
q = g_Handles[i];
|
||||||
if (q && !q->isfree)
|
if (q && !q->isfree)
|
||||||
|
0
dlls/sqlite/sdk/moduleconfig.h → dlls/sqlite/moduleconfig.h
Executable file → Normal file
0
dlls/sqlite/sdk/moduleconfig.h → dlls/sqlite/moduleconfig.h
Executable file → Normal file
@ -53,8 +53,8 @@
|
|||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalOptions>/D "NO_TCL" %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/D "NO_TCL" %(AdditionalOptions)</AdditionalOptions>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>..\;..\sdk;..\sqlite-source;..\sqlitepp;..\thread;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\;..\..\..\public;..\..\..\public\sdk; ..\..\..\public\amtl;..\sqlite-source;..\sqlitepp;..\thread;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;sqlite_EXPORTS;SM_DEFAULT_THREADER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;sqlite_EXPORTS;SM_DEFAULT_THREADER;HAVE_STDINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
@ -82,8 +82,8 @@
|
|||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\;..\sdk;..\sqlite-source;..\sqlitepp;..\thread;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\;..\..\..\public;..\..\..\public\sdk; ..\..\..\public\amtl;..\sqlite-source;..\sqlitepp;..\thread;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;sqlite_EXPORTS;SM_DEFAULT_THREADER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;sqlite_EXPORTS;SM_DEFAULT_THREADER;HAVE_STDINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
||||||
@ -157,12 +157,11 @@
|
|||||||
<ClCompile Include="..\sqlite-source\vdbemem.c" />
|
<ClCompile Include="..\sqlite-source\vdbemem.c" />
|
||||||
<ClCompile Include="..\sqlite-source\vtab.c" />
|
<ClCompile Include="..\sqlite-source\vtab.c" />
|
||||||
<ClCompile Include="..\sqlite-source\where.c" />
|
<ClCompile Include="..\sqlite-source\where.c" />
|
||||||
<ClCompile Include="..\sdk\amxxmodule.cpp" />
|
<ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\sqlheaders.h" />
|
<ClInclude Include="..\sqlheaders.h" />
|
||||||
<ClInclude Include="..\sqlite_header.h" />
|
<ClInclude Include="..\sqlite_header.h" />
|
||||||
<ClInclude Include="..\svn_version.h" />
|
|
||||||
<ClInclude Include="..\threading.h" />
|
<ClInclude Include="..\threading.h" />
|
||||||
<ClInclude Include="..\sqlitepp\ISQLDriver.h" />
|
<ClInclude Include="..\sqlitepp\ISQLDriver.h" />
|
||||||
<ClInclude Include="..\sqlitepp\SqliteDatabase.h" />
|
<ClInclude Include="..\sqlitepp\SqliteDatabase.h" />
|
||||||
@ -189,9 +188,8 @@
|
|||||||
<ClInclude Include="..\sqlite-source\sqliteInt.h" />
|
<ClInclude Include="..\sqlite-source\sqliteInt.h" />
|
||||||
<ClInclude Include="..\sqlite-source\vdbe.h" />
|
<ClInclude Include="..\sqlite-source\vdbe.h" />
|
||||||
<ClInclude Include="..\sqlite-source\vdbeInt.h" />
|
<ClInclude Include="..\sqlite-source\vdbeInt.h" />
|
||||||
<ClInclude Include="..\sdk\moduleconfig.h" />
|
<ClInclude Include="..\moduleconfig.h" />
|
||||||
<ClInclude Include="..\sdk\sh_list.h" />
|
<ClInclude Include="..\..\..\public\sdk\amxxmodule.h" />
|
||||||
<ClInclude Include="..\sdk\amxxmodule.h" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\..\plugins\include\sqlx.inc" />
|
<None Include="..\..\..\plugins\include\sqlx.inc" />
|
||||||
|
@ -33,9 +33,6 @@
|
|||||||
<Filter Include="Module SDK">
|
<Filter Include="Module SDK">
|
||||||
<UniqueIdentifier>{b24e595e-f6a9-4358-bbe3-094ef6383e53}</UniqueIdentifier>
|
<UniqueIdentifier>{b24e595e-f6a9-4358-bbe3-094ef6383e53}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Module SDK\AMXX STL">
|
|
||||||
<UniqueIdentifier>{a5586883-461e-4f33-a5df-d7a9226a4cb2}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Module SDK\SDK Base">
|
<Filter Include="Module SDK\SDK Base">
|
||||||
<UniqueIdentifier>{c60d3c45-e23b-4c5a-aae2-2c3c5441bac6}</UniqueIdentifier>
|
<UniqueIdentifier>{c60d3c45-e23b-4c5a-aae2-2c3c5441bac6}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
@ -203,7 +200,7 @@
|
|||||||
<ClCompile Include="..\sqlite-source\where.c">
|
<ClCompile Include="..\sqlite-source\where.c">
|
||||||
<Filter>SQLite Source</Filter>
|
<Filter>SQLite Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\sdk\amxxmodule.cpp">
|
<ClCompile Include="..\..\..\public\sdk\amxxmodule.cpp">
|
||||||
<Filter>Module SDK\SDK Base</Filter>
|
<Filter>Module SDK\SDK Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -214,9 +211,6 @@
|
|||||||
<ClInclude Include="..\sqlite_header.h">
|
<ClInclude Include="..\sqlite_header.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\svn_version.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\threading.h">
|
<ClInclude Include="..\threading.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -295,15 +289,12 @@
|
|||||||
<ClInclude Include="..\sqlite-source\vdbeInt.h">
|
<ClInclude Include="..\sqlite-source\vdbeInt.h">
|
||||||
<Filter>SQLite Source</Filter>
|
<Filter>SQLite Source</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\sdk\moduleconfig.h">
|
<ClInclude Include="..\..\..\public\sdk\amxxmodule.h">
|
||||||
<Filter>Module SDK</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sdk\sh_list.h">
|
|
||||||
<Filter>Module SDK\AMXX STL</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sdk\amxxmodule.h">
|
|
||||||
<Filter>Module SDK\SDK Base</Filter>
|
<Filter>Module SDK\SDK Base</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\moduleconfig.h">
|
||||||
|
<Filter>Module SDK</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\..\plugins\include\sqlx.inc">
|
<None Include="..\..\..\plugins\include\sqlx.inc">
|
||||||
|
@ -1,480 +0,0 @@
|
|||||||
// vim: set ts=4 sw=4 tw=99 noet:
|
|
||||||
//
|
|
||||||
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
|
|
||||||
// Copyright (C) The AMX Mod X Development Team.
|
|
||||||
//
|
|
||||||
// This software is licensed under the GNU General Public License, version 3 or higher.
|
|
||||||
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
|
|
||||||
// https://alliedmods.net/amxmodx-license
|
|
||||||
|
|
||||||
#ifndef __CVECTOR_H__
|
|
||||||
#define __CVECTOR_H__
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
// Vector
|
|
||||||
template <class T> class CVector
|
|
||||||
{
|
|
||||||
bool Grow(size_t amount)
|
|
||||||
{
|
|
||||||
// automatic grow
|
|
||||||
size_t newSize = m_Size * 2;
|
|
||||||
|
|
||||||
if (newSize == 0)
|
|
||||||
{
|
|
||||||
newSize = 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (m_CurrentUsedSize + amount > newSize)
|
|
||||||
{
|
|
||||||
newSize *= 2;
|
|
||||||
}
|
|
||||||
T *newData = new T[newSize];
|
|
||||||
if (!newData)
|
|
||||||
return false;
|
|
||||||
if (m_Data)
|
|
||||||
{
|
|
||||||
for (size_t i=0; i<m_CurrentUsedSize; i++)
|
|
||||||
newData[i] = m_Data[i];
|
|
||||||
delete [] m_Data;
|
|
||||||
}
|
|
||||||
m_Data = newData;
|
|
||||||
m_Size = newSize;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GrowIfNeeded(size_t amount)
|
|
||||||
{
|
|
||||||
if (m_CurrentUsedSize + amount >= m_Size)
|
|
||||||
{
|
|
||||||
return Grow(amount);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChangeSize(size_t size)
|
|
||||||
{
|
|
||||||
// change size
|
|
||||||
if (size == m_Size)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!size)
|
|
||||||
{
|
|
||||||
if (m_Data)
|
|
||||||
{
|
|
||||||
delete [] m_Data;
|
|
||||||
m_Data = NULL;
|
|
||||||
m_Size = 0;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
T *newData = new T[size];
|
|
||||||
if (!newData)
|
|
||||||
return false;
|
|
||||||
if (m_Data)
|
|
||||||
{
|
|
||||||
size_t end = (m_CurrentUsedSize < size) ? (m_CurrentUsedSize) : size;
|
|
||||||
for (size_t i=0; i<end; i++)
|
|
||||||
newData[i] = m_Data[i];
|
|
||||||
delete [] m_Data;
|
|
||||||
}
|
|
||||||
m_Data = newData;
|
|
||||||
m_Size = size;
|
|
||||||
if (m_CurrentUsedSize > m_Size)
|
|
||||||
m_CurrentUsedSize = m_Size;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FreeMemIfPossible()
|
|
||||||
{
|
|
||||||
if (!m_Data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!m_CurrentUsedSize)
|
|
||||||
{
|
|
||||||
ChangeSize(0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t newSize = m_Size;
|
|
||||||
while (m_CurrentUsedSize <= newSize / 2)
|
|
||||||
newSize /= 2;
|
|
||||||
|
|
||||||
if (newSize != m_Size)
|
|
||||||
ChangeSize(newSize);
|
|
||||||
}
|
|
||||||
protected:
|
|
||||||
T *m_Data;
|
|
||||||
size_t m_Size;
|
|
||||||
size_t m_CurrentUsedSize;
|
|
||||||
public:
|
|
||||||
class iterator
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
T *m_Ptr;
|
|
||||||
public:
|
|
||||||
// constructors / destructors
|
|
||||||
iterator()
|
|
||||||
{
|
|
||||||
m_Ptr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator(T * ptr)
|
|
||||||
{
|
|
||||||
m_Ptr = ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// member functions
|
|
||||||
T * base()
|
|
||||||
{
|
|
||||||
return m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
const T * base() const
|
|
||||||
{
|
|
||||||
return m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// operators
|
|
||||||
T & operator*()
|
|
||||||
{
|
|
||||||
return *m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
T * operator->()
|
|
||||||
{
|
|
||||||
return m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator++() // preincrement
|
|
||||||
{
|
|
||||||
++m_Ptr;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator++(int) // postincrement
|
|
||||||
{
|
|
||||||
iterator tmp = *this;
|
|
||||||
++m_Ptr;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator--() // predecrement
|
|
||||||
{
|
|
||||||
--m_Ptr;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator--(int) // postdecrememnt
|
|
||||||
{
|
|
||||||
iterator tmp = *this;
|
|
||||||
--m_Ptr;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(T * right) const
|
|
||||||
{
|
|
||||||
return (m_Ptr == right);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const iterator & right) const
|
|
||||||
{
|
|
||||||
return (m_Ptr == right.m_Ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!=(T * right) const
|
|
||||||
{
|
|
||||||
return (m_Ptr != right);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!=(const iterator & right) const
|
|
||||||
{
|
|
||||||
return (m_Ptr != right.m_Ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator+=(size_t offset)
|
|
||||||
{
|
|
||||||
m_Ptr += offset;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator-=(size_t offset)
|
|
||||||
{
|
|
||||||
m_Ptr -= offset;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator+(size_t offset) const
|
|
||||||
{
|
|
||||||
iterator tmp(*this);
|
|
||||||
tmp.m_Ptr += offset;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator-(size_t offset) const
|
|
||||||
{
|
|
||||||
iterator tmp(*this);
|
|
||||||
tmp.m_Ptr -= offset;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
T & operator[](size_t offset)
|
|
||||||
{
|
|
||||||
return (*(*this + offset));
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & operator[](size_t offset) const
|
|
||||||
{
|
|
||||||
return (*(*this + offset));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator<(const iterator & right) const
|
|
||||||
{
|
|
||||||
return m_Ptr < right.m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator>(const iterator & right) const
|
|
||||||
{
|
|
||||||
return m_Ptr > right.m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator<=(const iterator & right) const
|
|
||||||
{
|
|
||||||
return m_Ptr <= right.m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator>=(const iterator & right) const
|
|
||||||
{
|
|
||||||
return m_Ptr >= right.m_Ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t operator-(const iterator & right) const
|
|
||||||
{
|
|
||||||
return m_Ptr - right.m_Ptr;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// constructors / destructors
|
|
||||||
CVector<T>()
|
|
||||||
{
|
|
||||||
m_Size = 0;
|
|
||||||
m_CurrentUsedSize = 0;
|
|
||||||
m_Data = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
CVector<T>(const CVector<T> & other)
|
|
||||||
{
|
|
||||||
// copy data
|
|
||||||
m_Data = new T [other.m_CurrentUsedSize];
|
|
||||||
m_Size = other.m_CurrentUsedSize;
|
|
||||||
m_CurrentUsedSize = other.m_CurrentUsedSize;
|
|
||||||
for (size_t i=0; i<other.m_CurrentUsedSize; i++)
|
|
||||||
m_Data[i] = other.m_Data[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
~CVector<T>()
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// interface
|
|
||||||
size_t size() const
|
|
||||||
{
|
|
||||||
return m_CurrentUsedSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t capacity() const
|
|
||||||
{
|
|
||||||
return m_Size;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator begin() const
|
|
||||||
{
|
|
||||||
return iterator(m_Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator end() const
|
|
||||||
{
|
|
||||||
return iterator(m_Data + m_CurrentUsedSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator iterAt(size_t pos)
|
|
||||||
{
|
|
||||||
if (pos > m_CurrentUsedSize)
|
|
||||||
assert(0);
|
|
||||||
return iterator(m_Data + pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool reserve(size_t newSize)
|
|
||||||
{
|
|
||||||
if (newSize > m_Size)
|
|
||||||
return ChangeSize(newSize);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool push_back(const T & elem)
|
|
||||||
{
|
|
||||||
if (!GrowIfNeeded(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Data[m_CurrentUsedSize++] = elem;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pop_back()
|
|
||||||
{
|
|
||||||
--m_CurrentUsedSize;
|
|
||||||
if (m_CurrentUsedSize < 0)
|
|
||||||
m_CurrentUsedSize = 0;
|
|
||||||
|
|
||||||
FreeMemIfPossible();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool resize(size_t newSize)
|
|
||||||
{
|
|
||||||
if (!ChangeSize(newSize))
|
|
||||||
return false;
|
|
||||||
m_CurrentUsedSize = newSize;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool empty() const
|
|
||||||
{
|
|
||||||
return (m_CurrentUsedSize == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
T & at(size_t pos)
|
|
||||||
{
|
|
||||||
if (pos > m_CurrentUsedSize)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & at(size_t pos) const
|
|
||||||
{
|
|
||||||
if (pos > m_CurrentUsedSize)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
T & operator[](size_t pos)
|
|
||||||
{
|
|
||||||
return at(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & operator[](size_t pos) const
|
|
||||||
{
|
|
||||||
return at(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
T & front()
|
|
||||||
{
|
|
||||||
if (m_CurrentUsedSize < 1)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & front() const
|
|
||||||
{
|
|
||||||
if (m_CurrentUsedSize < 1)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
T & back()
|
|
||||||
{
|
|
||||||
if (m_CurrentUsedSize < 1)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[m_CurrentUsedSize - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & back() const
|
|
||||||
{
|
|
||||||
if (m_CurrentUsedSize < 1)
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
return m_Data[m_CurrentUsedSize - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator insert(iterator where, const T & value)
|
|
||||||
{
|
|
||||||
// validate iter
|
|
||||||
if (where < m_Data || where > (m_Data + m_CurrentUsedSize))
|
|
||||||
return iterator(0);
|
|
||||||
|
|
||||||
size_t ofs = where - begin();
|
|
||||||
|
|
||||||
if (!GrowIfNeeded(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
++m_CurrentUsedSize;
|
|
||||||
|
|
||||||
where = begin() + ofs;
|
|
||||||
|
|
||||||
// Move subsequent entries
|
|
||||||
for (T *ptr = m_Data + m_CurrentUsedSize - 2; ptr >= where.base(); --ptr)
|
|
||||||
*(ptr + 1) = *ptr;
|
|
||||||
|
|
||||||
*where.base() = value;
|
|
||||||
|
|
||||||
return where;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator erase(iterator where)
|
|
||||||
{
|
|
||||||
// validate iter
|
|
||||||
if (where < m_Data || where >= (m_Data + m_CurrentUsedSize))
|
|
||||||
return iterator(0);
|
|
||||||
|
|
||||||
size_t ofs = where - begin();
|
|
||||||
|
|
||||||
if (m_CurrentUsedSize > 1)
|
|
||||||
{
|
|
||||||
// move
|
|
||||||
T *theend = m_Data + m_CurrentUsedSize;
|
|
||||||
for (T *ptr = where.base() + 1; ptr < theend; ++ptr)
|
|
||||||
*(ptr - 1) = *ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
--m_CurrentUsedSize;
|
|
||||||
|
|
||||||
FreeMemIfPossible();
|
|
||||||
|
|
||||||
return begin() + ofs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
m_Size = 0;
|
|
||||||
m_CurrentUsedSize = 0;
|
|
||||||
if (m_Data)
|
|
||||||
{
|
|
||||||
delete [] m_Data;
|
|
||||||
m_Data = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // __CVECTOR_H__
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,298 +0,0 @@
|
|||||||
/* ======== SourceMM ========
|
|
||||||
* Copyright (C) 2004-2005 Metamod:Source Development Team
|
|
||||||
* No warranties of any kind
|
|
||||||
*
|
|
||||||
* License: zlib/libpng
|
|
||||||
*
|
|
||||||
* Author(s): David "BAILOPAN" Anderson
|
|
||||||
* ============================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE_SMM_LIST_H
|
|
||||||
#define _INCLUDE_SMM_LIST_H
|
|
||||||
|
|
||||||
// MSVC8 fix for offsetof macro redefition warnings
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#if _MSC_VER >= 1400
|
|
||||||
#undef offsetof
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <new>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
namespace SourceHook
|
|
||||||
{
|
|
||||||
|
|
||||||
//This class is from CSDM for AMX Mod X
|
|
||||||
/*
|
|
||||||
A circular, doubly-linked list with one sentinel node
|
|
||||||
|
|
||||||
Empty:
|
|
||||||
m_Head = sentinel
|
|
||||||
m_Head->next = m_Head;
|
|
||||||
m_Head->prev = m_Head;
|
|
||||||
One element:
|
|
||||||
m_Head = sentinel
|
|
||||||
m_Head->next = node1
|
|
||||||
m_Head->prev = node1
|
|
||||||
node1->next = m_Head
|
|
||||||
node1->prev = m_Head
|
|
||||||
Two elements:
|
|
||||||
m_Head = sentinel
|
|
||||||
m_Head->next = node1
|
|
||||||
m_Head->prev = node2
|
|
||||||
node1->next = node2
|
|
||||||
node1->prev = m_Head
|
|
||||||
node2->next = m_Head
|
|
||||||
node2->prev = node1
|
|
||||||
*/
|
|
||||||
template <class T>
|
|
||||||
class List
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
class iterator;
|
|
||||||
friend class iterator;
|
|
||||||
class ListNode
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ListNode(const T & o) : obj(o) { };
|
|
||||||
ListNode() { };
|
|
||||||
T obj;
|
|
||||||
ListNode *next;
|
|
||||||
ListNode *prev;
|
|
||||||
};
|
|
||||||
private:
|
|
||||||
// Initializes the sentinel node.
|
|
||||||
// BAIL used malloc instead of new in order to bypass the need for a constructor.
|
|
||||||
ListNode *_Initialize()
|
|
||||||
{
|
|
||||||
ListNode *n = (ListNode *)malloc(sizeof(ListNode));
|
|
||||||
n->next = n;
|
|
||||||
n->prev = n;
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
public:
|
|
||||||
List() : m_Head(_Initialize()), m_Size(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
List(const List &src) : m_Head(_Initialize()), m_Size(0)
|
|
||||||
{
|
|
||||||
iterator iter;
|
|
||||||
for (iter=src.begin(); iter!=src.end(); iter++)
|
|
||||||
push_back( (*iter) );
|
|
||||||
}
|
|
||||||
~List()
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
|
|
||||||
// Don't forget to free the sentinel
|
|
||||||
if (m_Head)
|
|
||||||
{
|
|
||||||
free(m_Head);
|
|
||||||
m_Head = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void push_back(const T &obj)
|
|
||||||
{
|
|
||||||
ListNode *node = new ListNode(obj);
|
|
||||||
|
|
||||||
node->prev = m_Head->prev;
|
|
||||||
node->next = m_Head;
|
|
||||||
m_Head->prev->next = node;
|
|
||||||
m_Head->prev = node;
|
|
||||||
|
|
||||||
m_Size++;
|
|
||||||
}
|
|
||||||
size_t size()
|
|
||||||
{
|
|
||||||
return m_Size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
ListNode *node = m_Head->next;
|
|
||||||
ListNode *temp;
|
|
||||||
m_Head->next = m_Head;
|
|
||||||
m_Head->prev = m_Head;
|
|
||||||
|
|
||||||
// Iterate through the nodes until we find g_Head (the sentinel) again
|
|
||||||
while (node != m_Head)
|
|
||||||
{
|
|
||||||
temp = node->next;
|
|
||||||
delete node;
|
|
||||||
node = temp;
|
|
||||||
}
|
|
||||||
m_Size = 0;
|
|
||||||
}
|
|
||||||
bool empty()
|
|
||||||
{
|
|
||||||
return (m_Size == 0);
|
|
||||||
}
|
|
||||||
T & back()
|
|
||||||
{
|
|
||||||
return m_Head->prev->obj;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
ListNode *m_Head;
|
|
||||||
size_t m_Size;
|
|
||||||
public:
|
|
||||||
class iterator
|
|
||||||
{
|
|
||||||
friend class List;
|
|
||||||
public:
|
|
||||||
iterator()
|
|
||||||
{
|
|
||||||
m_This = NULL;
|
|
||||||
}
|
|
||||||
iterator(const List &src)
|
|
||||||
{
|
|
||||||
m_This = src.m_Head;
|
|
||||||
}
|
|
||||||
iterator(ListNode *n) : m_This(n)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
iterator(const iterator &where)
|
|
||||||
{
|
|
||||||
m_This = where.m_This;
|
|
||||||
}
|
|
||||||
//pre decrement
|
|
||||||
iterator & operator--()
|
|
||||||
{
|
|
||||||
if (m_This)
|
|
||||||
m_This = m_This->prev;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
//post decrement
|
|
||||||
iterator operator--(int)
|
|
||||||
{
|
|
||||||
iterator old(*this);
|
|
||||||
if (m_This)
|
|
||||||
m_This = m_This->prev;
|
|
||||||
return old;
|
|
||||||
}
|
|
||||||
|
|
||||||
//pre increment
|
|
||||||
iterator & operator++()
|
|
||||||
{
|
|
||||||
if (m_This)
|
|
||||||
m_This = m_This->next;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
//post increment
|
|
||||||
iterator operator++(int)
|
|
||||||
{
|
|
||||||
iterator old(*this);
|
|
||||||
if (m_This)
|
|
||||||
m_This = m_This->next;
|
|
||||||
return old;
|
|
||||||
}
|
|
||||||
|
|
||||||
const T & operator * () const
|
|
||||||
{
|
|
||||||
return m_This->obj;
|
|
||||||
}
|
|
||||||
T & operator * ()
|
|
||||||
{
|
|
||||||
return m_This->obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
T * operator -> ()
|
|
||||||
{
|
|
||||||
return &(m_This->obj);
|
|
||||||
}
|
|
||||||
const T * operator -> () const
|
|
||||||
{
|
|
||||||
return &(m_This->obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator != (const iterator &where) const
|
|
||||||
{
|
|
||||||
return (m_This != where.m_This);
|
|
||||||
}
|
|
||||||
bool operator ==(const iterator &where) const
|
|
||||||
{
|
|
||||||
return (m_This == where.m_This);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
ListNode *m_This;
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
iterator begin() const
|
|
||||||
{
|
|
||||||
return iterator(m_Head->next);
|
|
||||||
}
|
|
||||||
iterator end() const
|
|
||||||
{
|
|
||||||
return iterator(m_Head);
|
|
||||||
}
|
|
||||||
iterator erase(iterator &where)
|
|
||||||
{
|
|
||||||
ListNode *pNode = where.m_This;
|
|
||||||
iterator iter(where);
|
|
||||||
iter++;
|
|
||||||
|
|
||||||
|
|
||||||
// Works for all cases: empty list, erasing first element, erasing tail, erasing in the middle...
|
|
||||||
pNode->prev->next = pNode->next;
|
|
||||||
pNode->next->prev = pNode->prev;
|
|
||||||
|
|
||||||
delete pNode;
|
|
||||||
m_Size--;
|
|
||||||
|
|
||||||
return iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator insert(iterator where, const T &obj)
|
|
||||||
{
|
|
||||||
// Insert obj right before where
|
|
||||||
|
|
||||||
ListNode *node = new ListNode(obj);
|
|
||||||
ListNode *pWhereNode = where.m_This;
|
|
||||||
|
|
||||||
pWhereNode->prev->next = node;
|
|
||||||
node->prev = pWhereNode->prev;
|
|
||||||
pWhereNode->prev = node;
|
|
||||||
node->next = pWhereNode;
|
|
||||||
|
|
||||||
m_Size++;
|
|
||||||
|
|
||||||
return iterator(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
void remove(const T & obj)
|
|
||||||
{
|
|
||||||
iterator b;
|
|
||||||
for (b=begin(); b!=end(); b++)
|
|
||||||
{
|
|
||||||
if ( (*b) == obj )
|
|
||||||
{
|
|
||||||
erase( b );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
iterator find(const U & equ)
|
|
||||||
{
|
|
||||||
iterator iter;
|
|
||||||
for (iter=begin(); iter!=end(); iter++)
|
|
||||||
{
|
|
||||||
if ( (*iter) == equ )
|
|
||||||
return iter;
|
|
||||||
}
|
|
||||||
return end();
|
|
||||||
}
|
|
||||||
List & operator =(const List &src)
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
iterator iter;
|
|
||||||
for (iter=src.begin(); iter!=src.end(); iter++)
|
|
||||||
push_back( (*iter) );
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}; //NAMESPACE
|
|
||||||
|
|
||||||
#endif //_INCLUDE_CSDM_LIST_H
|
|
@ -1,219 +0,0 @@
|
|||||||
/* ======== SourceMM ========
|
|
||||||
* Copyright (C) 2004-2005 Metamod:Source Development Team
|
|
||||||
* No warranties of any kind
|
|
||||||
*
|
|
||||||
* License: zlib/libpng
|
|
||||||
*
|
|
||||||
* Author(s): Pavol "PM OnoTo" Marko
|
|
||||||
* ============================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SH_STACK_H__
|
|
||||||
#define __SH_STACK_H__
|
|
||||||
|
|
||||||
#define SH_STACK_DEFAULT_SIZE 4
|
|
||||||
|
|
||||||
//namespace SourceHook
|
|
||||||
//{/
|
|
||||||
// Vector
|
|
||||||
template <class T> class CStack
|
|
||||||
{
|
|
||||||
T *m_Elements;
|
|
||||||
size_t m_AllocatedSize;
|
|
||||||
size_t m_UsedSize;
|
|
||||||
public:
|
|
||||||
friend class iterator;
|
|
||||||
class iterator
|
|
||||||
{
|
|
||||||
CStack<T> *m_pParent;
|
|
||||||
size_t m_Index;
|
|
||||||
public:
|
|
||||||
iterator(CStack<T> *pParent, size_t id) : m_pParent(pParent), m_Index(id)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator(CStack<T> *pParent) : m_pParent(pParent), m_Index(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator() : m_pParent(NULL), m_Index(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
T &operator *()
|
|
||||||
{
|
|
||||||
return m_pParent->m_Elements[m_Index];
|
|
||||||
}
|
|
||||||
const T &operator *() const
|
|
||||||
{
|
|
||||||
return m_pParent->m_Elements[m_Index];
|
|
||||||
}
|
|
||||||
|
|
||||||
T * operator->()
|
|
||||||
{
|
|
||||||
return m_pParent->m_Elements + m_Index;
|
|
||||||
}
|
|
||||||
|
|
||||||
const T * operator->() const
|
|
||||||
{
|
|
||||||
return m_pParent->m_Elements + m_Index;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator++() // preincrement
|
|
||||||
{
|
|
||||||
++m_Index;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator++(int) // postincrement
|
|
||||||
{
|
|
||||||
iterator tmp = *this;
|
|
||||||
++m_Index;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator & operator--() // predecrement
|
|
||||||
{
|
|
||||||
--m_Index;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator operator--(int) // postdecrememnt
|
|
||||||
{
|
|
||||||
iterator tmp = *this;
|
|
||||||
--m_Index;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const iterator & right) const
|
|
||||||
{
|
|
||||||
return (m_pParent == right.m_pParent && m_Index == right.m_Index);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!=(const iterator & right) const
|
|
||||||
{
|
|
||||||
return !(*this == right);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
CStack() : m_Elements(new T[SH_STACK_DEFAULT_SIZE]),
|
|
||||||
m_AllocatedSize(SH_STACK_DEFAULT_SIZE),
|
|
||||||
m_UsedSize(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
CStack(size_t size) : m_Elements(new T[size]),
|
|
||||||
m_AllocatedSize(size),
|
|
||||||
m_UsedSize(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CStack(const CStack &other) : m_Elements(NULL),
|
|
||||||
m_AllocatedSize(0),
|
|
||||||
m_UsedSize(0)
|
|
||||||
{
|
|
||||||
reserve(other.m_AllocatedSize);
|
|
||||||
m_UsedSize = other.m_UsedSize;
|
|
||||||
for (size_t i = 0; i < m_UsedSize; ++i)
|
|
||||||
m_Elements[i] = other.m_Elements[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
~CStack()
|
|
||||||
{
|
|
||||||
if (m_Elements)
|
|
||||||
delete [] m_Elements;
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator=(const CStack &other)
|
|
||||||
{
|
|
||||||
if (m_AllocatedSize < other.m_AllocatedSize)
|
|
||||||
{
|
|
||||||
if (m_Elements)
|
|
||||||
delete [] m_Elements;
|
|
||||||
m_Elements = new T[other.m_AllocatedSize];
|
|
||||||
m_AllocatedSize = other.m_AllocatedSize;
|
|
||||||
}
|
|
||||||
m_UsedSize = other.m_UsedSize;
|
|
||||||
for (size_t i = 0; i < m_UsedSize; ++i)
|
|
||||||
m_Elements[i] = other.m_Elements[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool push(const T &val)
|
|
||||||
{
|
|
||||||
if (m_UsedSize + 1 == m_AllocatedSize)
|
|
||||||
{
|
|
||||||
// zOHNOES! REALLOCATE!
|
|
||||||
m_AllocatedSize *= 2;
|
|
||||||
T *newElements = new T[m_AllocatedSize];
|
|
||||||
if (!newElements)
|
|
||||||
{
|
|
||||||
m_AllocatedSize /= 2;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (m_Elements)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < m_UsedSize; ++i)
|
|
||||||
newElements[i] = m_Elements[i];
|
|
||||||
delete [] m_Elements;
|
|
||||||
}
|
|
||||||
m_Elements = newElements;
|
|
||||||
}
|
|
||||||
m_Elements[m_UsedSize++] = val;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
void pop()
|
|
||||||
{
|
|
||||||
--m_UsedSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
T &front()
|
|
||||||
{
|
|
||||||
return m_Elements[m_UsedSize - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
const T &front() const
|
|
||||||
{
|
|
||||||
return m_Elements[m_UsedSize - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
iterator begin()
|
|
||||||
{
|
|
||||||
return iterator(this, 0);
|
|
||||||
}
|
|
||||||
iterator end()
|
|
||||||
{
|
|
||||||
return iterator(this, m_UsedSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t size()
|
|
||||||
{
|
|
||||||
return m_UsedSize;
|
|
||||||
}
|
|
||||||
size_t capacity()
|
|
||||||
{
|
|
||||||
return m_AllocatedSize;
|
|
||||||
}
|
|
||||||
bool empty()
|
|
||||||
{
|
|
||||||
return m_UsedSize == 0 ? true : false;
|
|
||||||
}
|
|
||||||
bool reserve(size_t size)
|
|
||||||
{
|
|
||||||
if (size > m_AllocatedSize)
|
|
||||||
{
|
|
||||||
T *newElements = new T[size];
|
|
||||||
if (!newElements)
|
|
||||||
return false;
|
|
||||||
if (m_Elements)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < m_UsedSize; ++i)
|
|
||||||
newElements[i] = m_Elements[i];
|
|
||||||
delete [] m_Elements;
|
|
||||||
}
|
|
||||||
m_Elements = newElements;
|
|
||||||
m_AllocatedSize = size;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//}; //namespace SourceHook
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,367 +0,0 @@
|
|||||||
/* ======== SourceMM ========
|
|
||||||
* Copyright (C) 2004-2005 Metamod:Source Development Team
|
|
||||||
* No warranties of any kind
|
|
||||||
*
|
|
||||||
* License: zlib/libpng
|
|
||||||
*
|
|
||||||
* Author(s): David "BAILOPAN" Anderson
|
|
||||||
* ============================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* AMX Mod X
|
|
||||||
*
|
|
||||||
* by the AMX Mod X Development Team
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE_CSTRING_H
|
|
||||||
#define _INCLUDE_CSTRING_H
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
namespace SourceHook
|
|
||||||
{
|
|
||||||
class String
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
String()
|
|
||||||
{
|
|
||||||
v = NULL;
|
|
||||||
a_size = 0;
|
|
||||||
//assign("");
|
|
||||||
}
|
|
||||||
|
|
||||||
~String()
|
|
||||||
{
|
|
||||||
if (v)
|
|
||||||
delete [] v;
|
|
||||||
}
|
|
||||||
|
|
||||||
String(const char *src)
|
|
||||||
{
|
|
||||||
v = NULL;
|
|
||||||
a_size = 0;
|
|
||||||
assign(src);
|
|
||||||
}
|
|
||||||
|
|
||||||
String(const String &src)
|
|
||||||
{
|
|
||||||
v = NULL;
|
|
||||||
a_size = 0;
|
|
||||||
assign(src.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *c_str() { return v?v:""; }
|
|
||||||
|
|
||||||
const char *c_str() const { return v?v:""; }
|
|
||||||
|
|
||||||
void append(const char *t)
|
|
||||||
{
|
|
||||||
Grow(size() + strlen(t) + 1);
|
|
||||||
strcat(v, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
void append(const char c)
|
|
||||||
{
|
|
||||||
size_t len = size();
|
|
||||||
Grow(len + 2);
|
|
||||||
v[len] = c;
|
|
||||||
v[len + 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
void append(String &d)
|
|
||||||
{
|
|
||||||
append(d.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void assign(const String &src)
|
|
||||||
{
|
|
||||||
assign(src.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void assign(const char *d)
|
|
||||||
{
|
|
||||||
if (!d)
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
} else {
|
|
||||||
Grow(strlen(d) + 1, false);
|
|
||||||
strcpy(v, d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
if (v)
|
|
||||||
v[0] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
int compare (const char *d)
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
return strcmp("", d);
|
|
||||||
else
|
|
||||||
return strcmp(v, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Added this for amxx inclusion
|
|
||||||
bool empty()
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (v[0] == '\0')
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t size()
|
|
||||||
{
|
|
||||||
if (v)
|
|
||||||
return strlen(v);
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int find(const char c, int index = 0)
|
|
||||||
{
|
|
||||||
int len = static_cast<int>(size());
|
|
||||||
if (len < 1)
|
|
||||||
return npos;
|
|
||||||
if (index >= len || index < 0)
|
|
||||||
return npos;
|
|
||||||
int i = 0;
|
|
||||||
for (i=index; i<len; i++)
|
|
||||||
{
|
|
||||||
if (v[i] == c)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return npos;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_space(int c)
|
|
||||||
{
|
|
||||||
if (c == '\f' || c == '\n' ||
|
|
||||||
c == '\t' || c == '\r' ||
|
|
||||||
c == '\v' || c == ' ')
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void trim()
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unsigned int i = 0;
|
|
||||||
unsigned int j = 0;
|
|
||||||
size_t len = strlen(v);
|
|
||||||
|
|
||||||
if (len == 1)
|
|
||||||
{
|
|
||||||
if (is_space(v[i]))
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char c0 = v[0];
|
|
||||||
|
|
||||||
if (is_space(c0))
|
|
||||||
{
|
|
||||||
for (i=0; i<len; i++)
|
|
||||||
{
|
|
||||||
if (!is_space(v[i]) || (is_space(v[i]) && ((unsigned char)i==len-1)))
|
|
||||||
{
|
|
||||||
erase(0, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
len = strlen(v);
|
|
||||||
|
|
||||||
if (len < 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_space(v[len-1]))
|
|
||||||
{
|
|
||||||
for (i=len-1; i<len; i--)
|
|
||||||
{
|
|
||||||
if (!is_space(v[i])
|
|
||||||
|| (is_space(v[i]) && i==0))
|
|
||||||
{
|
|
||||||
erase(i+1, j);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len == 1)
|
|
||||||
{
|
|
||||||
if (is_space(v[0]))
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void erase(unsigned int start, int num = npos)
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
return;
|
|
||||||
unsigned int i = 0;
|
|
||||||
size_t len = size();
|
|
||||||
//check for bounds
|
|
||||||
if (num == npos || start+num > len-start)
|
|
||||||
num = len - start;
|
|
||||||
//do the erasing
|
|
||||||
bool copyflag = false;
|
|
||||||
for (i=0; i<len; i++)
|
|
||||||
{
|
|
||||||
if (i>=start && i<start+num)
|
|
||||||
{
|
|
||||||
if (i+num < len)
|
|
||||||
{
|
|
||||||
v[i] = v[i+num];
|
|
||||||
} else {
|
|
||||||
v[i] = 0;
|
|
||||||
}
|
|
||||||
copyflag = true;
|
|
||||||
} else if (copyflag) {
|
|
||||||
if (i+num < len)
|
|
||||||
{
|
|
||||||
v[i] = v[i+num];
|
|
||||||
} else {
|
|
||||||
v[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
len -= num;
|
|
||||||
v[len] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
String substr(unsigned int index, int num = npos)
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
{
|
|
||||||
String b("");
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
String ns;
|
|
||||||
|
|
||||||
size_t len = size();
|
|
||||||
|
|
||||||
if (index >= len || !v)
|
|
||||||
return ns;
|
|
||||||
|
|
||||||
if (num == npos)
|
|
||||||
{
|
|
||||||
num = len - index;
|
|
||||||
} else if (index+num >= len) {
|
|
||||||
num = len - index;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int i = 0;
|
|
||||||
unsigned int nslen = num + 2;
|
|
||||||
|
|
||||||
ns.Grow(nslen);
|
|
||||||
|
|
||||||
for (i=index; i<index+num; i++)
|
|
||||||
ns.append(v[i]);
|
|
||||||
|
|
||||||
return ns;
|
|
||||||
}
|
|
||||||
|
|
||||||
void toLower()
|
|
||||||
{
|
|
||||||
if (!v)
|
|
||||||
return;
|
|
||||||
unsigned int i = 0;
|
|
||||||
size_t len = strlen(v);
|
|
||||||
for (i=0; i<len; i++)
|
|
||||||
{
|
|
||||||
if (v[i] >= 65 && v[i] <= 90)
|
|
||||||
v[i] &= ~(1<<5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String & operator = (const String &src)
|
|
||||||
{
|
|
||||||
assign(src);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
String & operator = (const char *src)
|
|
||||||
{
|
|
||||||
assign(src);
|
|
||||||
return *this;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
char operator [] (unsigned int index)
|
|
||||||
{
|
|
||||||
if (index > size() || !v)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return v[index];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int at(int a)
|
|
||||||
{
|
|
||||||
if (a < 0 || a >= (int)size() || !v)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return v[a];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool at(int at, char c)
|
|
||||||
{
|
|
||||||
if (at < 0 || at >= (int)size() || !v)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
v[at] = c;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void Grow(unsigned int d, bool copy=true)
|
|
||||||
{
|
|
||||||
if (d <= a_size)
|
|
||||||
return;
|
|
||||||
char *n = new char[d + 1];
|
|
||||||
if (copy && v)
|
|
||||||
strcpy(n, v);
|
|
||||||
if (v)
|
|
||||||
delete [] v;
|
|
||||||
else
|
|
||||||
strcpy(n, "");
|
|
||||||
v = n;
|
|
||||||
a_size = d + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *v;
|
|
||||||
unsigned int a_size;
|
|
||||||
public:
|
|
||||||
static const int npos = -1;
|
|
||||||
};
|
|
||||||
|
|
||||||
}; //NAMESPACE
|
|
||||||
|
|
||||||
#endif //_INCLUDE_CSTRING_H
|
|
@ -16,7 +16,7 @@
|
|||||||
#ifndef _SQLITEINT_H_
|
#ifndef _SQLITEINT_H_
|
||||||
#define _SQLITEINT_H_
|
#define _SQLITEINT_H_
|
||||||
|
|
||||||
#if defined _MSC_VER && _MSC_VER >= 1400
|
#if defined _MSC_VER && _MSC_VER >= 1400 && !defined _CRT_SECURE_NO_DEPRECATE
|
||||||
#define _CRT_SECURE_NO_DEPRECATE
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ SWThreadHandle *BaseWorker::PopThreadFromQueue()
|
|||||||
if (!m_ThreadQueue.size())
|
if (!m_ThreadQueue.size())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
SourceHook::List<SWThreadHandle *>::iterator begin;
|
List<SWThreadHandle *>::iterator begin;
|
||||||
SWThreadHandle *swt;
|
SWThreadHandle *swt;
|
||||||
|
|
||||||
begin = m_ThreadQueue.begin();
|
begin = m_ThreadQueue.begin();
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#ifndef _INCLUDE_SOURCEMOD_BASEWORKER_H
|
#ifndef _INCLUDE_SOURCEMOD_BASEWORKER_H
|
||||||
#define _INCLUDE_SOURCEMOD_BASEWORKER_H
|
#define _INCLUDE_SOURCEMOD_BASEWORKER_H
|
||||||
|
|
||||||
#include "sh_list.h"
|
#include <sh_list.h>
|
||||||
#include "ThreadSupport.h"
|
#include "ThreadSupport.h"
|
||||||
|
|
||||||
#define SM_DEFAULT_THREADS_PER_FRAME 1
|
#define SM_DEFAULT_THREADS_PER_FRAME 1
|
||||||
@ -73,7 +73,7 @@ public: //BaseWorker
|
|||||||
virtual void SetMaxThreadsPerFrame(unsigned int threads);
|
virtual void SetMaxThreadsPerFrame(unsigned int threads);
|
||||||
virtual unsigned int GetMaxThreadsPerFrame();
|
virtual unsigned int GetMaxThreadsPerFrame();
|
||||||
protected:
|
protected:
|
||||||
SourceHook::List<SWThreadHandle *> m_ThreadQueue;
|
List<SWThreadHandle *> m_ThreadQueue;
|
||||||
unsigned int m_perFrame;
|
unsigned int m_perFrame;
|
||||||
volatile WorkerState m_state;
|
volatile WorkerState m_state;
|
||||||
};
|
};
|
||||||
|
@ -14,9 +14,7 @@
|
|||||||
#include "amxxmodule.h"
|
#include "amxxmodule.h"
|
||||||
#include "sqlite_header.h"
|
#include "sqlite_header.h"
|
||||||
#include "threading.h"
|
#include "threading.h"
|
||||||
|
#include <am-string.h>
|
||||||
using namespace SourceMod;
|
|
||||||
using namespace SourceHook;
|
|
||||||
|
|
||||||
MainThreader g_Threader;
|
MainThreader g_Threader;
|
||||||
ThreadWorker *g_pWorker = NULL;
|
ThreadWorker *g_pWorker = NULL;
|
||||||
@ -141,20 +139,20 @@ void MysqlThread::SetForward(int forward)
|
|||||||
|
|
||||||
void MysqlThread::SetInfo(const char *db)
|
void MysqlThread::SetInfo(const char *db)
|
||||||
{
|
{
|
||||||
m_db.assign(db);
|
m_db = db;
|
||||||
m_qrInfo.queue_time = gpGlobals->time;
|
m_qrInfo.queue_time = gpGlobals->time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlThread::SetQuery(const char *query)
|
void MysqlThread::SetQuery(const char *query)
|
||||||
{
|
{
|
||||||
m_query.assign(query);
|
m_query = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlThread::RunThread(IThreadHandle *pHandle)
|
void MysqlThread::RunThread(IThreadHandle *pHandle)
|
||||||
{
|
{
|
||||||
DatabaseInfo info;
|
DatabaseInfo info;
|
||||||
|
|
||||||
info.database = m_db.c_str();
|
info.database = m_db.chars();
|
||||||
info.pass = "";
|
info.pass = "";
|
||||||
info.user = "";
|
info.user = "";
|
||||||
info.host = "";
|
info.host = "";
|
||||||
@ -174,7 +172,7 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
m_qrInfo.query_success = false;
|
m_qrInfo.query_success = false;
|
||||||
} else {
|
} else {
|
||||||
m_qrInfo.connect_success = true;
|
m_qrInfo.connect_success = true;
|
||||||
pQuery = pDatabase->PrepareQuery(m_query.c_str());
|
pQuery = pDatabase->PrepareQuery(m_query.chars());
|
||||||
if (!pQuery->Execute2(&m_qrInfo.amxinfo.info, m_qrInfo.amxinfo.error, 254))
|
if (!pQuery->Execute2(&m_qrInfo.amxinfo.info, m_qrInfo.amxinfo.error, 254))
|
||||||
{
|
{
|
||||||
m_qrInfo.query_success = false;
|
m_qrInfo.query_success = false;
|
||||||
@ -193,8 +191,8 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
{
|
{
|
||||||
m_qrInfo.amxinfo.pQuery = pQuery;
|
m_qrInfo.amxinfo.pQuery = pQuery;
|
||||||
} else {
|
} else {
|
||||||
m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
|
m_qrInfo.amxinfo.opt_ptr = new char[m_query.length() + 1];
|
||||||
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
|
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.chars());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDatabase)
|
if (pDatabase)
|
||||||
@ -418,7 +416,7 @@ bool AtomicResult::FieldNameToNum(const char *name, unsigned int *columnId)
|
|||||||
for (unsigned int i=0; i<m_FieldCount; i++)
|
for (unsigned int i=0; i<m_FieldCount; i++)
|
||||||
{
|
{
|
||||||
assert(m_Table[i] != NULL);
|
assert(m_Table[i] != NULL);
|
||||||
if (strcmp(m_Table[i]->c_str(), name) == 0)
|
if (strcmp(m_Table[i]->chars(), name) == 0)
|
||||||
{
|
{
|
||||||
if (columnId)
|
if (columnId)
|
||||||
{
|
{
|
||||||
@ -438,7 +436,7 @@ const char *AtomicResult::FieldNumToName(unsigned int num)
|
|||||||
|
|
||||||
assert(m_Table[num] != NULL);
|
assert(m_Table[num] != NULL);
|
||||||
|
|
||||||
return m_Table[num]->c_str();
|
return m_Table[num]->chars();
|
||||||
}
|
}
|
||||||
|
|
||||||
double AtomicResult::GetDouble(unsigned int columnId)
|
double AtomicResult::GetDouble(unsigned int columnId)
|
||||||
@ -479,7 +477,7 @@ const char *AtomicResult::GetString(unsigned int columnId)
|
|||||||
|
|
||||||
assert(m_Table[idx] != NULL);
|
assert(m_Table[idx] != NULL);
|
||||||
|
|
||||||
return m_Table[idx]->c_str();
|
return m_Table[idx]->chars();
|
||||||
}
|
}
|
||||||
|
|
||||||
IResultRow *AtomicResult::GetRow()
|
IResultRow *AtomicResult::GetRow()
|
||||||
@ -529,11 +527,11 @@ void AtomicResult::CopyFrom(IResultSet *rs)
|
|||||||
size_t newTotal = (m_RowCount * m_FieldCount) + m_FieldCount;
|
size_t newTotal = (m_RowCount * m_FieldCount) + m_FieldCount;
|
||||||
if (newTotal > m_AllocSize)
|
if (newTotal > m_AllocSize)
|
||||||
{
|
{
|
||||||
SourceHook::String **table = new SourceHook::String *[newTotal];
|
ke::AString **table = new ke::AString *[newTotal];
|
||||||
memset(table, 0, newTotal * sizeof(SourceHook::String *));
|
memset(table, 0, newTotal * sizeof(ke::AString *));
|
||||||
if (m_Table)
|
if (m_Table)
|
||||||
{
|
{
|
||||||
memcpy(table, m_Table, m_AllocSize * sizeof(SourceHook::String *));
|
memcpy(table, m_Table, m_AllocSize * sizeof(ke::AString *));
|
||||||
delete [] m_Table;
|
delete [] m_Table;
|
||||||
}
|
}
|
||||||
m_Table = table;
|
m_Table = table;
|
||||||
@ -544,9 +542,9 @@ void AtomicResult::CopyFrom(IResultSet *rs)
|
|||||||
{
|
{
|
||||||
if (m_Table[i])
|
if (m_Table[i])
|
||||||
{
|
{
|
||||||
m_Table[i]->assign(rs->FieldNumToName(i));
|
*m_Table[i] = rs->FieldNumToName(i);
|
||||||
} else {
|
} else {
|
||||||
m_Table[i] = new SourceHook::String(rs->FieldNumToName(i));
|
m_Table[i] = new ke::AString(rs->FieldNumToName(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,9 +557,9 @@ void AtomicResult::CopyFrom(IResultSet *rs)
|
|||||||
{
|
{
|
||||||
if (m_Table[idx])
|
if (m_Table[idx])
|
||||||
{
|
{
|
||||||
m_Table[idx]->assign(row->GetString(i));
|
*m_Table[idx] = row->GetString(i);
|
||||||
} else {
|
} else {
|
||||||
m_Table[idx] = new SourceHook::String(row->GetString(i));
|
m_Table[idx] = new ke::AString(row->GetString(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rs->NextRow();
|
rs->NextRow();
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
#include "IThreader.h"
|
#include "IThreader.h"
|
||||||
#include "ISQLDriver.h"
|
#include "ISQLDriver.h"
|
||||||
#include "sh_string.h"
|
#include <am-string.h>
|
||||||
#include "CVector.h"
|
#include <am-vector.h>
|
||||||
#include "sh_stack.h"
|
#include <sh_stack.h>
|
||||||
|
|
||||||
struct QueuedResultInfo
|
struct QueuedResultInfo
|
||||||
{
|
{
|
||||||
@ -64,7 +64,7 @@ private:
|
|||||||
unsigned int m_RowCount;
|
unsigned int m_RowCount;
|
||||||
unsigned int m_FieldCount;
|
unsigned int m_FieldCount;
|
||||||
size_t m_AllocSize;
|
size_t m_AllocSize;
|
||||||
SourceHook::String **m_Table;
|
ke::AString **m_Table;
|
||||||
unsigned int m_CurRow;
|
unsigned int m_CurRow;
|
||||||
bool m_IsFree;
|
bool m_IsFree;
|
||||||
};
|
};
|
||||||
@ -85,8 +85,8 @@ public:
|
|||||||
void RunThread(IThreadHandle *pHandle);
|
void RunThread(IThreadHandle *pHandle);
|
||||||
void OnTerminate(IThreadHandle *pHandle, bool cancel);
|
void OnTerminate(IThreadHandle *pHandle, bool cancel);
|
||||||
private:
|
private:
|
||||||
SourceHook::String m_query;
|
ke::AString m_query;
|
||||||
SourceHook::String m_db;
|
ke::AString m_db;
|
||||||
cell *m_data;
|
cell *m_data;
|
||||||
ucell m_datalen;
|
ucell m_datalen;
|
||||||
size_t m_maxdatalen;
|
size_t m_maxdatalen;
|
||||||
|
Loading…
Reference in New Issue
Block a user