mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 06:15:37 +03:00
Modified to fix memory leaks and improve speed
This commit is contained in:
parent
7e97156fc4
commit
b6fa60b0bd
@ -24,12 +24,11 @@ void OnAmxxAttach( void )
|
|||||||
|
|
||||||
MF_AddNatives(map_exports);
|
MF_AddNatives(map_exports);
|
||||||
MF_AddNatives(map_creation_exports);
|
MF_AddNatives(map_creation_exports);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnAmxxDetach( void )
|
void OnAmxxDetach( void )
|
||||||
{
|
{
|
||||||
MasterTrie.Clear();
|
JudyClearMasterTrie(&MasterTrie);
|
||||||
MasterList.Clear();
|
JudyClearMasterList(&MasterList);
|
||||||
MasterMap.Clear();
|
JudyClearMasterMap(&MasterMap);
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
@ -6,22 +6,7 @@
|
|||||||
--------------------Configuration: Array - Win32 Release--------------------
|
--------------------Configuration: Array - Win32 Release--------------------
|
||||||
</h3>
|
</h3>
|
||||||
<h3>Command Lines</h3>
|
<h3>Command Lines</h3>
|
||||||
Creating temporary file "C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC49.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\Edward\LOCALS~1\Temp\RSP36D.tmp" with contents
|
||||||
[
|
|
||||||
/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ARRAY_EXPORTS" /FR"Release/" /Fp"Release/Array.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\Array.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\BinTrieNatives.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\Capsule.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\CArray.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\CBinTrie.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\CKeytable.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\ListNatives.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\MapNatives.cpp"
|
|
||||||
"C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\amxxmodule.cpp"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC49.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC4A.tmp" with contents
|
|
||||||
[
|
[
|
||||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/Array.pdb" /machine:I386 /out:"Release/Array.dll" /implib:"Release/Array.lib"
|
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/Array.pdb" /machine:I386 /out:"Release/Array.dll" /implib:"Release/Array.lib"
|
||||||
".\Release\Array.obj"
|
".\Release\Array.obj"
|
||||||
@ -36,61 +21,16 @@ kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32
|
|||||||
".\Release\amxxmodule.obj"
|
".\Release\amxxmodule.obj"
|
||||||
".\Judy.lib"
|
".\Judy.lib"
|
||||||
]
|
]
|
||||||
Creating command line "link.exe @C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC4A.tmp"
|
Creating command line "link.exe @C:\DOCUME~1\Edward\LOCALS~1\Temp\RSP36D.tmp"
|
||||||
<h3>Output Window</h3>
|
<h3>Output Window</h3>
|
||||||
Compiling...
|
|
||||||
Array.cpp
|
|
||||||
BinTrieNatives.cpp
|
|
||||||
Capsule.cpp
|
|
||||||
CArray.cpp
|
|
||||||
CBinTrie.cpp
|
|
||||||
CKeytable.cpp
|
|
||||||
JudyExtra.cpp
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(8) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(15) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(40) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(75) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(80) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(83) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(103) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(107) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(110) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(133) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(147) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(152) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(155) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(170) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(178) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(186) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(189) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
C:\Documents and Settings\Edward\Desktop\module\Judy Test\Array\JudyExtra.cpp(217) : warning C4101: 'e' : unreferenced local variable
|
|
||||||
ListNatives.cpp
|
|
||||||
MapNatives.cpp
|
|
||||||
amxxmodule.cpp
|
|
||||||
Linking...
|
Linking...
|
||||||
Creating library Release/Array.lib and object Release/Array.exp
|
Creating library Release/Array.lib and object Release/Array.exp
|
||||||
LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
|
LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
|
||||||
Creating temporary file "C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC4E.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /o"Release/Array.bsc"
|
|
||||||
".\Release\Array.sbr"
|
|
||||||
".\Release\BinTrieNatives.sbr"
|
|
||||||
".\Release\Capsule.sbr"
|
|
||||||
".\Release\CArray.sbr"
|
|
||||||
".\Release\CBinTrie.sbr"
|
|
||||||
".\Release\CKeytable.sbr"
|
|
||||||
".\Release\JudyExtra.sbr"
|
|
||||||
".\Release\ListNatives.sbr"
|
|
||||||
".\Release\MapNatives.sbr"
|
|
||||||
".\Release\amxxmodule.sbr"]
|
|
||||||
Creating command line "bscmake.exe @C:\DOCUME~1\Edward\LOCALS~1\Temp\RSPC4E.tmp"
|
|
||||||
Creating browse info file...
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
<h3>Results</h3>
|
||||||
Array.dll - 0 error(s), 19 warning(s)
|
Array.dll - 0 error(s), 1 warning(s)
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -48,8 +48,7 @@
|
|||||||
#define JUDY_SLAVE_ISEMPTY_FUNC JUDY_GLUE_FUNC( bintrie , _isempty )
|
#define JUDY_SLAVE_ISEMPTY_FUNC JUDY_GLUE_FUNC( bintrie , _isempty )
|
||||||
#define JUDY_SLAVE_ISEMPTY_STR JUDY_GLUE_STR ( bintrie , _isempty )
|
#define JUDY_SLAVE_ISEMPTY_STR JUDY_GLUE_STR ( bintrie , _isempty )
|
||||||
|
|
||||||
#define JUDY_SLAVE_REMOVE_FUNC JUDY_GLUE_FUNC( bintrie , _remove )
|
#define NO_JUDY_SLAVE_REMOVE_FUNC
|
||||||
#define JUDY_SLAVE_REMOVE_STR JUDY_GLUE_STR ( bintrie , _remove )
|
|
||||||
|
|
||||||
#define JUDY_SLAVE_SEARCH_FUNCTIONS
|
#define JUDY_SLAVE_SEARCH_FUNCTIONS
|
||||||
#define JUDY_SLAVE_FIRST_FUNC JUDY_GLUE_FUNC( bintrie , _first )
|
#define JUDY_SLAVE_FIRST_FUNC JUDY_GLUE_FUNC( bintrie , _first )
|
||||||
|
@ -46,12 +46,24 @@ static cell AMX_NATIVE_CALL bintrie_get(AMX *amx,cell *params)
|
|||||||
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Slave Get Function ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL bintrie_remove(AMX *amx,cell *params)
|
||||||
|
{
|
||||||
|
DTYPE* Unit = NULL;
|
||||||
|
|
||||||
|
JUDY_GET_INDEX(MNAME,Unit, params[1]);
|
||||||
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
|
|
||||||
|
try { return Unit->Delete(Indice ); }
|
||||||
|
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Slave Delete Function ");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AMX_NATIVE_INFO bintrie_usage_exports[] =
|
AMX_NATIVE_INFO bintrie_usage_exports[] =
|
||||||
{
|
{
|
||||||
{ "bintrie_create", bintrie_create },
|
{ "bintrie_create", bintrie_create },
|
||||||
{ "bintrie_set", bintrie_set },
|
{ "bintrie_set", bintrie_set },
|
||||||
{ "bintrie_get", bintrie_get },
|
{ "bintrie_get", bintrie_get },
|
||||||
|
{ "bintrie_remove", bintrie_remove },
|
||||||
|
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
@ -16,12 +16,13 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Array() { Table = NULL; }
|
Array() { Table = NULL; }
|
||||||
~Array() { Clear(); }
|
~Array() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { JudyClearList(this); return JudyLFreeArray(&Table, PJE0); }
|
Word_t Clear() { JudyClearList(this); return JudyLFreeArray(&Table, PJE0); }
|
||||||
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
||||||
|
|
||||||
int Delete(cell Key) { delete Get(Key,true); return JudyLDel(&Table, Key, PJE0 ); }
|
int Delete(cell Key) { return JudyLDel(&Table, Key, PJE0 ); }
|
||||||
|
|
||||||
void Set(cell Index, Pvoid_t value, bool disable_check)
|
void Set(cell Index, Pvoid_t value, bool disable_check)
|
||||||
{
|
{
|
||||||
|
@ -10,6 +10,7 @@ public:
|
|||||||
virtual Word_t MemoryUsed() =0;
|
virtual Word_t MemoryUsed() =0;
|
||||||
|
|
||||||
virtual int Delete(cell Key) =0;
|
virtual int Delete(cell Key) =0;
|
||||||
|
virtual void Remove() =0;
|
||||||
|
|
||||||
virtual void Set(cell Index, Pvoid_t value, bool disable_check = false) =0;
|
virtual void Set(cell Index, Pvoid_t value, bool disable_check = false) =0;
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ public:
|
|||||||
virtual Word_t MemoryUsed() =0;
|
virtual Word_t MemoryUsed() =0;
|
||||||
|
|
||||||
virtual int Delete(char* Key) =0;
|
virtual int Delete(char* Key) =0;
|
||||||
|
virtual void Remove() =0;
|
||||||
|
|
||||||
virtual void Set(char* Index, Pvoid_t value, bool disable_check = false) =0;
|
virtual void Set(char* Index, Pvoid_t value, bool disable_check = false) =0;
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define _BINTRIECLASS_H
|
#define _BINTRIECLASS_H
|
||||||
|
|
||||||
#include "JudyIncludes.h"
|
#include "JudyIncludes.h"
|
||||||
|
#include "JudyExtra.h"
|
||||||
//#include <Judy1.h>
|
//#include <Judy1.h>
|
||||||
|
|
||||||
class BinTrie
|
class BinTrie
|
||||||
@ -13,9 +14,10 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
BinTrie() { Table = NULL; }
|
BinTrie() { Table = NULL; }
|
||||||
~BinTrie() { Judy1FreeArray(&Table, PJE0); }
|
~BinTrie() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { return Judy1FreeArray(&Table, PJE0); }
|
Word_t Clear() { JudyClearBinTrie(this); return Judy1FreeArray(&Table, PJE0); }
|
||||||
Word_t MemoryUsed() { return Judy1MemUsed(Table); }
|
Word_t MemoryUsed() { return Judy1MemUsed(Table); }
|
||||||
|
|
||||||
cell Delete(cell Key) { return Judy1Unset(&Table, Key, PJE0 ); }
|
cell Delete(cell Key) { return Judy1Unset(&Table, Key, PJE0 ); }
|
||||||
|
@ -12,12 +12,13 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Hashtable() { Table = NULL; }
|
Hashtable() { Table = NULL; }
|
||||||
~Hashtable() { Clear(); }
|
~Hashtable() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { return JudyHSFreeArray(&Table, PJE0); }
|
Word_t Clear() { return JudyHSFreeArray(&Table, PJE0); }
|
||||||
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
||||||
|
|
||||||
int Delete(char* Key) { delete Get(Key,true); return JudyHSDel(&Table, Key, strlen(Key), PJE0 ); }
|
int Delete(char* Key) { return JudyHSDel(&Table, Key, strlen(Key), PJE0 ); }
|
||||||
|
|
||||||
void Set(char* Index, Pvoid_t value, bool disable_check)
|
void Set(char* Index, Pvoid_t value, bool disable_check)
|
||||||
{
|
{
|
||||||
|
@ -16,12 +16,13 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Keytable() { Table = NULL; }
|
Keytable() { Table = NULL; }
|
||||||
~Keytable() { Clear(); }
|
~Keytable() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { JudyClearMap(this); return JudySLFreeArray(&Table, PJE0); }
|
Word_t Clear() { JudyClearMap(this); return JudySLFreeArray(&Table, PJE0); }
|
||||||
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
Word_t MemoryUsed() { return JudyLMemUsed(Table); }
|
||||||
|
|
||||||
int Delete(char* Key) { delete Get(Key,true); return JudySLDel(&Table, Key, PJE0 ); }
|
int Delete(char* Key) { return JudySLDel(&Table, Key, PJE0 ); }
|
||||||
|
|
||||||
void Set(char* Index, Pvoid_t value, bool disable_check)
|
void Set(char* Index, Pvoid_t value, bool disable_check)
|
||||||
{
|
{
|
||||||
|
@ -27,13 +27,14 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Capsule() { data = NULL; type = capsule_type_none;}
|
Capsule() { data = NULL; type = capsule_type_none;}
|
||||||
~Capsule() { Clear(); }
|
~Capsule() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Capsule(bool set) { SetBool(set); }
|
Capsule(bool set) { SetBool(set); }
|
||||||
Capsule(cell set) { SetInt(set); }
|
Capsule(cell set) { SetInt(set); }
|
||||||
Capsule(REAL set) { SetFlo(set); }
|
Capsule(REAL set) { SetFlo(set); }
|
||||||
Capsule(JudyVec* set) { SetVec(set); }
|
Capsule(JudyVec* set) { SetVec(set); }
|
||||||
Capsule(char* set) { SetStr(set); }
|
Capsule(char* set) { SetStr(set); }
|
||||||
|
|
||||||
bool GetBool( void );
|
bool GetBool( void );
|
||||||
void SetBool(bool set);
|
void SetBool(bool set);
|
||||||
@ -58,7 +59,7 @@ public:
|
|||||||
bool CheckEmpty(bool clear);
|
bool CheckEmpty(bool clear);
|
||||||
|
|
||||||
Pvoid_t GetData( void ) { return data; }
|
Pvoid_t GetData( void ) { return data; }
|
||||||
char GetType( void ) { return type; }
|
char GetType( void ) { return type; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -12,13 +12,14 @@ private:
|
|||||||
Array MasterArray;
|
Array MasterArray;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ComboArray() {}
|
ComboArray() { }
|
||||||
~ComboArray() { Clear(); }
|
~ComboArray() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { return (MasterBin.Clear() + MasterArray.Clear() ); }
|
Word_t Clear() { return (MasterBin.Clear() + MasterArray.Clear() ); }
|
||||||
Word_t MemoryUsed() { return (MasterBin.MemoryUsed() + MasterArray.MemoryUsed() ); }
|
Word_t MemoryUsed() { return (MasterBin.MemoryUsed() + MasterArray.MemoryUsed() ); }
|
||||||
|
|
||||||
int Delete(cell Key) { return (MasterBin.Delete(Key) + MasterArray.Delete(Key) ); }
|
int Delete(cell Key) { return (MasterBin.Delete(Key) + MasterArray.Delete(Key) ); }
|
||||||
|
|
||||||
void Set(cell Index, Pvoid_t value, bool disable_check)
|
void Set(cell Index, Pvoid_t value, bool disable_check)
|
||||||
{
|
{
|
||||||
|
@ -12,10 +12,11 @@ private:
|
|||||||
Hashtable MasterHash;
|
Hashtable MasterHash;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ComboTable() { }
|
ComboTable() { }
|
||||||
~ComboTable() { Clear(); }
|
~ComboTable() { Clear(); }
|
||||||
|
void Remove() { delete this; }
|
||||||
|
|
||||||
Word_t Clear() { return (MasterKey.Clear() + MasterHash.Clear() ); }
|
Word_t Clear() { return (MasterHash.Clear() + MasterKey.Clear() ); }
|
||||||
Word_t MemoryUsed() { return (MasterKey.MemoryUsed() + MasterHash.MemoryUsed() ); }
|
Word_t MemoryUsed() { return (MasterKey.MemoryUsed() + MasterHash.MemoryUsed() ); }
|
||||||
|
|
||||||
int Delete(char* Key) { return (MasterKey.Delete(Key) + MasterHash.Delete(Key) ); }
|
int Delete(char* Key) { return (MasterKey.Delete(Key) + MasterHash.Delete(Key) ); }
|
||||||
@ -25,8 +26,8 @@ public:
|
|||||||
|
|
||||||
void Set(char* Index, Pvoid_t value, bool disable_check)
|
void Set(char* Index, Pvoid_t value, bool disable_check)
|
||||||
{
|
{
|
||||||
MasterHash.Set(Index, value);
|
|
||||||
MasterKey.Set(Index, value);
|
MasterKey.Set(Index, value);
|
||||||
|
MasterHash.Set(Index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pvoid_t Get(char* Index, bool disable_check = false)
|
Pvoid_t Get(char* Index, bool disable_check = false)
|
||||||
@ -37,8 +38,8 @@ public:
|
|||||||
template <class Type>
|
template <class Type>
|
||||||
void Set(char* Index, Type value)
|
void Set(char* Index, Type value)
|
||||||
{
|
{
|
||||||
MasterHash.Set(Index, value);
|
|
||||||
MasterKey.Set(Index, value);
|
MasterKey.Set(Index, value);
|
||||||
|
MasterHash.Set(Index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Type>
|
template <class Type>
|
||||||
|
@ -14,6 +14,11 @@ ComboArray MNAME;
|
|||||||
// generic_delete(id)
|
// generic_delete(id)
|
||||||
static cell AMX_NATIVE_CALL JUDY_MASTER_DELETE_FUNC(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL JUDY_MASTER_DELETE_FUNC(AMX *amx,cell *params)
|
||||||
{
|
{
|
||||||
|
DTYPE* Unit = NULL;
|
||||||
|
JUDY_GET_INDEX(MNAME,Unit, params[1] );
|
||||||
|
|
||||||
|
Unit->Remove();
|
||||||
|
|
||||||
try { return MNAME.Delete( params[1] ); }
|
try { return MNAME.Delete( params[1] ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Delete function ");
|
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Delete function ");
|
||||||
}
|
}
|
||||||
@ -228,15 +233,25 @@ ComboArray MNAME;
|
|||||||
static cell AMX_NATIVE_CALL JUDY_SLAVE_REMOVE_FUNC(AMX *amx,cell *params)
|
static cell AMX_NATIVE_CALL JUDY_SLAVE_REMOVE_FUNC(AMX *amx,cell *params)
|
||||||
{
|
{
|
||||||
DTYPE* Unit = NULL;
|
DTYPE* Unit = NULL;
|
||||||
|
STYPE* Storage;
|
||||||
|
|
||||||
JUDY_GET_INDEX(MNAME,Unit, params[1]);
|
JUDY_GET_INDEX(MNAME,Unit, params[1]);
|
||||||
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
|
|
||||||
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
try { return Unit->Delete(JUDY_GET_KEY(params,2) ); }
|
try { return Unit->Delete(Indice); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Slave Delete Function ");
|
JUDY_ERROR_CATCH("Judy Error: (No Error Possible) - Delete function ");
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#error Must Have Delete func: JUDY_SLAVE_DELETE_FUNC not defined!
|
#ifdef NO_JUDY_SLAVE_REMOVE_FUNC
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error Must Have Delete func: JUDY_SLAVE_REMOVE_FUNC not defined!
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
///* End Required Slave Edit Funcs *///
|
///* End Required Slave Edit Funcs *///
|
||||||
@ -255,7 +270,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
bool Value = (params[3] != NULL);
|
bool Value = (params[3] != NULL);
|
||||||
|
|
||||||
Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, true ) );
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
|
||||||
if(Storage == NULL) Storage = new STYPE(Value);
|
if(Storage == NULL) Storage = new STYPE(Value);
|
||||||
else Storage->SetBool(Value);
|
else Storage->SetBool(Value);
|
||||||
@ -281,7 +296,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
bool disable_check = (params[3] != NULL);
|
bool disable_check = (params[3] != NULL);
|
||||||
|
|
||||||
try { Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, disable_check ) ); }
|
try { Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, disable_check ) ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
||||||
|
|
||||||
if(Storage == NULL) return 0;
|
if(Storage == NULL) return 0;
|
||||||
@ -313,7 +328,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
cell Value = params[3];
|
cell Value = params[3];
|
||||||
|
|
||||||
Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, true ) );
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
|
||||||
if(Storage == NULL) Storage = new STYPE(Value);
|
if(Storage == NULL) Storage = new STYPE(Value);
|
||||||
else Storage->SetInt(Value);
|
else Storage->SetInt(Value);
|
||||||
@ -339,7 +354,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
bool disable_check = (params[3] != NULL);
|
bool disable_check = (params[3] != NULL);
|
||||||
|
|
||||||
try { Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, disable_check ) ); }
|
try { Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, disable_check ) ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
||||||
|
|
||||||
if(Storage == NULL) return 0;
|
if(Storage == NULL) return 0;
|
||||||
@ -371,7 +386,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
REAL Value = amx_ctof(params[3]);
|
REAL Value = amx_ctof(params[3]);
|
||||||
|
|
||||||
Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, true ) );
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
|
||||||
if(Storage == NULL) Storage = new STYPE(Value);
|
if(Storage == NULL) Storage = new STYPE(Value);
|
||||||
else Storage->SetFlo(Value);
|
else Storage->SetFlo(Value);
|
||||||
@ -397,7 +412,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
bool disable_check = (params[3] != NULL);
|
bool disable_check = (params[3] != NULL);
|
||||||
|
|
||||||
try { Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, disable_check ) ); }
|
try { Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, disable_check ) ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
||||||
|
|
||||||
if(Storage == NULL) return 0;
|
if(Storage == NULL) return 0;
|
||||||
@ -429,7 +444,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
char* Value = MF_GetAmxString(amx,params[3],3,NULL);
|
char* Value = MF_GetAmxString(amx,params[3],3,NULL);
|
||||||
|
|
||||||
Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, true ) );
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
|
||||||
if(Storage == NULL) Storage = new STYPE(Value);
|
if(Storage == NULL) Storage = new STYPE(Value);
|
||||||
else Storage->SetStr(Value);
|
else Storage->SetStr(Value);
|
||||||
@ -455,7 +470,7 @@ ComboArray MNAME;
|
|||||||
ITYPE Indice = JUDY_GET_KEY(params,2);
|
ITYPE Indice = JUDY_GET_KEY(params,2);
|
||||||
bool disable_check = (params[5] != NULL);
|
bool disable_check = (params[5] != NULL);
|
||||||
|
|
||||||
try { Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, disable_check ) ); }
|
try { Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, disable_check ) ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
||||||
|
|
||||||
if(Storage == NULL) return 0;
|
if(Storage == NULL) return 0;
|
||||||
@ -493,7 +508,7 @@ ComboArray MNAME;
|
|||||||
amx_ctof(input_vec[2])
|
amx_ctof(input_vec[2])
|
||||||
);
|
);
|
||||||
|
|
||||||
Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, true ) );
|
Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
|
||||||
|
|
||||||
if(Storage == NULL) Storage = new STYPE(Value);
|
if(Storage == NULL) Storage = new STYPE(Value);
|
||||||
else Storage->SetVec(Value);
|
else Storage->SetVec(Value);
|
||||||
@ -520,7 +535,7 @@ ComboArray MNAME;
|
|||||||
cell *vAmx = MF_GetAmxAddr(amx, params[3]);
|
cell *vAmx = MF_GetAmxAddr(amx, params[3]);
|
||||||
bool disable_check = (params[4] != NULL);
|
bool disable_check = (params[4] != NULL);
|
||||||
|
|
||||||
try { Storage = reinterpret_cast<Capsule*>( Unit->Get(Indice, disable_check ) ); }
|
try { Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, disable_check ) ); }
|
||||||
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
JUDY_ERROR_CATCH("Judy Error: (Retrieve unset value) - Slave Get Function ");
|
||||||
|
|
||||||
if(Storage == NULL)
|
if(Storage == NULL)
|
||||||
@ -778,7 +793,10 @@ AMX_NATIVE_INFO EXPORT_NAME[] =
|
|||||||
{ JUDY_SLAVE_MEMORY_STR , JUDY_SLAVE_MEMORY_FUNC },
|
{ JUDY_SLAVE_MEMORY_STR , JUDY_SLAVE_MEMORY_FUNC },
|
||||||
{ JUDY_SLAVE_ISFILLED_STR , JUDY_SLAVE_ISFILLED_FUNC },
|
{ JUDY_SLAVE_ISFILLED_STR , JUDY_SLAVE_ISFILLED_FUNC },
|
||||||
{ JUDY_SLAVE_ISEMPTY_STR , JUDY_SLAVE_ISEMPTY_FUNC },
|
{ JUDY_SLAVE_ISEMPTY_STR , JUDY_SLAVE_ISEMPTY_FUNC },
|
||||||
|
|
||||||
|
#ifndef NO_JUDY_SLAVE_REMOVE_FUNC
|
||||||
{ JUDY_SLAVE_REMOVE_STR , JUDY_SLAVE_REMOVE_FUNC },
|
{ JUDY_SLAVE_REMOVE_STR , JUDY_SLAVE_REMOVE_FUNC },
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef JUDY_SLAVE_EDIT_BOOL
|
#ifdef JUDY_SLAVE_EDIT_BOOL
|
||||||
|
|
||||||
|
@ -1,8 +1,34 @@
|
|||||||
#include "JudyExtra.h"
|
#include "JudyExtra.h"
|
||||||
|
#include "CBinTrie.h"
|
||||||
|
|
||||||
|
bool JudyClearMasterTrie(CBaseList* master)
|
||||||
|
{
|
||||||
|
cell master_iten = NULL;
|
||||||
|
BinTrie* Storage = NULL;
|
||||||
|
|
||||||
|
try { master_iten = master->First(); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
while( true )
|
||||||
|
{
|
||||||
|
try { Storage = reinterpret_cast<BinTrie*>(master->Get(master_iten) ); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
|
try { master->Delete(master_iten); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
try { master_iten = master->Next(master_iten); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
bool JudyClearBinTrie(BinTrie* trie)
|
bool JudyClearBinTrie(BinTrie* trie)
|
||||||
{
|
{
|
||||||
Word_t trie_iten = 0;
|
Word_t trie_iten = NULL;
|
||||||
|
|
||||||
try { trie_iten = trie->First(); }
|
try { trie_iten = trie->First(); }
|
||||||
catch(JudyEx& e) { return false; }
|
catch(JudyEx& e) { return false; }
|
||||||
@ -19,7 +45,7 @@ bool JudyClearBinTrie(BinTrie* trie)
|
|||||||
|
|
||||||
bool JudySaveBinTrie(BinTrie* trie, char* file)
|
bool JudySaveBinTrie(BinTrie* trie, char* file)
|
||||||
{
|
{
|
||||||
Word_t trie_iten = 0;
|
Word_t trie_iten = NULL;
|
||||||
|
|
||||||
try { trie_iten = trie->First(); }
|
try { trie_iten = trie->First(); }
|
||||||
catch(JudyEx e) { return false; }
|
catch(JudyEx e) { return false; }
|
||||||
@ -49,7 +75,7 @@ bool JudyLoadBinTrie(BinTrie* trie, char* file)
|
|||||||
FILE *trieDB = fopen(file, "ab+");
|
FILE *trieDB = fopen(file, "ab+");
|
||||||
if (!trieDB) return false;
|
if (!trieDB) return false;
|
||||||
|
|
||||||
Word_t trie_iten = 0;
|
Word_t trie_iten = NULL;
|
||||||
|
|
||||||
bool value = false;
|
bool value = false;
|
||||||
|
|
||||||
@ -67,15 +93,46 @@ bool JudyLoadBinTrie(BinTrie* trie, char* file)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JudyClearMasterList(CBaseList* master)
|
||||||
|
{
|
||||||
|
cell master_iten = NULL;
|
||||||
|
CBaseList* Storage = NULL;
|
||||||
|
|
||||||
|
try { master_iten = master->First(); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
while( true )
|
||||||
|
{
|
||||||
|
try { Storage = reinterpret_cast<CBaseList*>(master->Get(master_iten) ); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
|
try { master->Delete(master_iten); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
try { master_iten = master->Next(master_iten); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
bool JudyClearList(CBaseList* list)
|
bool JudyClearList(CBaseList* list)
|
||||||
{
|
{
|
||||||
Word_t list_iten = 0;
|
Word_t list_iten = NULL;
|
||||||
|
Capsule* Storage = NULL;
|
||||||
|
|
||||||
try { list_iten = list->First(); }
|
try { list_iten = list->First(); }
|
||||||
catch(JudyEx& e) { return false; }
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
while( true )
|
while( true )
|
||||||
{
|
{
|
||||||
|
try { Storage = reinterpret_cast<Capsule*>(list->Get(list_iten) ); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
try { list->Delete(list_iten); }
|
try { list->Delete(list_iten); }
|
||||||
catch(JudyEx& e) { break; }
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
@ -88,7 +145,7 @@ bool JudyClearList(CBaseList* list)
|
|||||||
bool JudySaveList(CBaseList* list, char* file)
|
bool JudySaveList(CBaseList* list, char* file)
|
||||||
{
|
{
|
||||||
Capsule* Storage = NULL;
|
Capsule* Storage = NULL;
|
||||||
Word_t list_iten = 0;
|
Word_t list_iten = NULL;
|
||||||
bool no_error = true;
|
bool no_error = true;
|
||||||
|
|
||||||
try { list_iten = list->First(); }
|
try { list_iten = list->First(); }
|
||||||
@ -120,7 +177,7 @@ bool JudyLoadList(CBaseList* list, char* file)
|
|||||||
if (!listDB) return false;
|
if (!listDB) return false;
|
||||||
|
|
||||||
Capsule* Storage = NULL;
|
Capsule* Storage = NULL;
|
||||||
Word_t list_iten = 0;
|
Word_t list_iten = NULL;
|
||||||
bool no_error = true;
|
bool no_error = true;
|
||||||
|
|
||||||
while(!feof(listDB))
|
while(!feof(listDB))
|
||||||
@ -139,15 +196,46 @@ bool JudyLoadList(CBaseList* list, char* file)
|
|||||||
return no_error;
|
return no_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JudyClearMasterMap(CBaseList* master)
|
||||||
|
{
|
||||||
|
cell master_iten = NULL;
|
||||||
|
CBaseMap* Storage = NULL;
|
||||||
|
|
||||||
|
try { master_iten = master->First(); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
while( true )
|
||||||
|
{
|
||||||
|
try { Storage = reinterpret_cast<CBaseMap*>(master->Get(master_iten) ); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
|
try { master->Delete(master_iten); }
|
||||||
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
|
try { master_iten = master->Next(master_iten); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
bool JudyClearMap(CBaseMap* map)
|
bool JudyClearMap(CBaseMap* map)
|
||||||
{
|
{
|
||||||
char* map_iten = NULL;
|
char* map_iten = NULL;
|
||||||
|
Capsule* Storage = NULL;
|
||||||
|
|
||||||
try { map_iten = map->First(); }
|
try { map_iten = map->First(); }
|
||||||
catch(JudyEx& e) { return false; }
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
while( true )
|
while( true )
|
||||||
{
|
{
|
||||||
|
try { Storage = reinterpret_cast<Capsule*>(map->Get(map_iten) ); }
|
||||||
|
catch(JudyEx& e) { break; }
|
||||||
|
|
||||||
|
Storage->Remove();
|
||||||
|
|
||||||
try { map->Delete(map_iten); }
|
try { map->Delete(map_iten); }
|
||||||
catch(JudyEx& e) { return false; }
|
catch(JudyEx& e) { return false; }
|
||||||
|
|
||||||
@ -163,7 +251,7 @@ bool JudySaveMap(CBaseMap* map, char* file)
|
|||||||
{
|
{
|
||||||
Capsule* Storage = NULL;
|
Capsule* Storage = NULL;
|
||||||
char* map_iten = NULL;
|
char* map_iten = NULL;
|
||||||
size_t key_len = 0;
|
size_t key_len = NULL;
|
||||||
bool no_error = true;
|
bool no_error = true;
|
||||||
|
|
||||||
try { map_iten = map->First(); }
|
try { map_iten = map->First(); }
|
||||||
@ -200,7 +288,7 @@ bool JudyLoadMap(CBaseMap* map, char* file)
|
|||||||
|
|
||||||
Capsule* Storage = NULL;
|
Capsule* Storage = NULL;
|
||||||
char* map_iten = NULL;
|
char* map_iten = NULL;
|
||||||
size_t key_len = 0;
|
size_t key_len = NULL;
|
||||||
bool no_error = true;
|
bool no_error = true;
|
||||||
|
|
||||||
while(!feof(mapDB))
|
while(!feof(mapDB))
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
#ifndef _JUDYARRAY_SHARED_INCLUDED
|
#ifndef _JUDYARRAY_SHARED_INCLUDED
|
||||||
#define _JUDYARRAY_SHARED_INCLUDED
|
#define _JUDYARRAY_SHARED_INCLUDED
|
||||||
|
|
||||||
#include "CBinTrie.h"
|
|
||||||
#include "CBaseList.h"
|
#include "CBaseList.h"
|
||||||
#include "CBaseMap.h"
|
#include "CBaseMap.h"
|
||||||
|
|
||||||
|
class BinTrie;
|
||||||
|
|
||||||
|
extern bool JudyClearMasterTrie(CBaseList* master);
|
||||||
extern bool JudyClearBinTrie(BinTrie* trie);
|
extern bool JudyClearBinTrie(BinTrie* trie);
|
||||||
extern bool JudySaveBinTrie(BinTrie* trie, char* file);
|
extern bool JudySaveBinTrie(BinTrie* trie, char* file);
|
||||||
extern bool JudyLoadBinTrie(BinTrie* trie, char* file);
|
extern bool JudyLoadBinTrie(BinTrie* trie, char* file);
|
||||||
|
|
||||||
|
extern bool JudyClearMasterList(CBaseList* master);
|
||||||
extern bool JudyClearList(CBaseList* list);
|
extern bool JudyClearList(CBaseList* list);
|
||||||
extern bool JudySaveList(CBaseList* list, char* file);
|
extern bool JudySaveList(CBaseList* list, char* file);
|
||||||
extern bool JudyLoadList(CBaseList* list, char* file);
|
extern bool JudyLoadList(CBaseList* list, char* file);
|
||||||
|
|
||||||
|
extern bool JudyClearMasterMap(CBaseList* master);
|
||||||
extern bool JudyClearMap(CBaseMap* map);
|
extern bool JudyClearMap(CBaseMap* map);
|
||||||
extern bool JudySaveMap(CBaseMap* array, char* file);
|
extern bool JudySaveMap(CBaseMap* array, char* file);
|
||||||
extern bool JudyLoadMap(CBaseMap* array, char* file);
|
extern bool JudyLoadMap(CBaseMap* array, char* file);
|
||||||
|
Loading…
Reference in New Issue
Block a user