Modified to fix memory leaks and improve speed

This commit is contained in:
Twilight Suzuka 2006-03-16 02:11:48 +00:00
parent 7e97156fc4
commit b6fa60b0bd
18 changed files with 184 additions and 114 deletions

View File

@ -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.

View File

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

View File

@ -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 )

View File

@ -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 }
}; };

View File

@ -17,11 +17,12 @@ 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)
{ {

View File

@ -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;

View File

@ -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;

View File

@ -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 ); }

View File

@ -13,11 +13,12 @@ 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)
{ {

View File

@ -17,11 +17,12 @@ 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)
{ {

View File

@ -28,6 +28,7 @@ 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); }

View File

@ -12,8 +12,9 @@ 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() ); }

View File

@ -14,8 +14,9 @@ private:
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>

View File

@ -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);
try { return Unit->Delete(JUDY_GET_KEY(params,2) ); } Storage = reinterpret_cast<STYPE*>( Unit->Get(Indice, true ) );
JUDY_ERROR_CATCH("Judy Error: (No error possible) - Slave Delete Function "); Storage->Remove();
try { return Unit->Delete(Indice); }
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

View File

@ -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))

View File

@ -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);