Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change sort optional parameters from Handle to any and update SortFunc1D/2D typedef #1741

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions core/logic/smn_sorting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ static cell_t sm_SortStrings(IPluginContext *pContext, const cell_t *params)
struct sort_info
{
IPluginFunction *pFunc;
Handle_t hndl;
cell_t data;
cell_t array_addr;
cell_t *array_base;
cell_t *array_remap;
Expand All @@ -364,7 +364,7 @@ int sort1d_amx_custom(const void *elem1, const void *elem2)
pf->PushCell(c1);
pf->PushCell(c2);
pf->PushCell(g_SortInfo.array_addr);
pf->PushCell(g_SortInfo.hndl);
pf->PushCell(g_SortInfo.data);
pf->Invoke(&result);

return result;
Expand All @@ -386,7 +386,7 @@ static cell_t sm_SortCustom1D(IPluginContext *pContext, const cell_t *params)
sort_info oldinfo = g_SortInfo;

DetectExceptions eh(pContext);
g_SortInfo.hndl = params[4];
g_SortInfo.data = params[4];
g_SortInfo.array_addr = params[1];
g_SortInfo.array_remap = NULL;
g_SortInfo.array_base = NULL;
Expand Down Expand Up @@ -419,7 +419,7 @@ static int sort2d_amx_custom_legacy(const void *elem1, const void *elem2)
g_SortInfo.pFunc->PushCell(c1_addr);
g_SortInfo.pFunc->PushCell(c2_addr);
g_SortInfo.pFunc->PushCell(g_SortInfo.array_addr);
g_SortInfo.pFunc->PushCell(g_SortInfo.hndl);
g_SortInfo.pFunc->PushCell(g_SortInfo.data);
g_SortInfo.pFunc->Invoke(&result);

return result;
Expand Down Expand Up @@ -451,7 +451,7 @@ static cell_t sm_SortCustom2D_Legacy(IPluginContext *pContext, const cell_t *par

DetectExceptions eh(pContext);
g_SortInfo.pFunc = pFunction;
g_SortInfo.hndl = params[4];
g_SortInfo.data = params[4];
g_SortInfo.array_addr = params[1];
g_SortInfo.eh = &eh;

Expand Down Expand Up @@ -495,7 +495,7 @@ static int sort2d_amx_custom(const void *elem1, const void *elem2)
g_SortInfo.pFunc->PushCell(iv1);
g_SortInfo.pFunc->PushCell(iv2);
g_SortInfo.pFunc->PushCell(g_SortInfo.array_addr);
g_SortInfo.pFunc->PushCell(g_SortInfo.hndl);
g_SortInfo.pFunc->PushCell(g_SortInfo.data);
g_SortInfo.pFunc->Invoke(&result);

return result;
Expand All @@ -522,7 +522,7 @@ static cell_t sm_SortCustom2D(IPluginContext *pContext, const cell_t *params)

DetectExceptions eh(pContext);
g_SortInfo.pFunc = pFunction;
g_SortInfo.hndl = params[4];
g_SortInfo.data = params[4];
g_SortInfo.array_addr = params[1];
g_SortInfo.eh = &eh;

Expand Down Expand Up @@ -630,7 +630,7 @@ struct sort_infoADT
cell_t *array_base;
cell_t array_bsize;
Handle_t array_hndl;
Handle_t hndl;
cell_t data;
ExceptionHandler *eh;
};

Expand All @@ -646,7 +646,7 @@ int sort_adtarray_custom(const void *elem1, const void *elem2)
pf->PushCell(((cell_t) ((cell_t *) elem1 - g_SortInfoADT.array_base)) / g_SortInfoADT.array_bsize);
pf->PushCell(((cell_t) ((cell_t *) elem2 - g_SortInfoADT.array_base)) / g_SortInfoADT.array_bsize);
pf->PushCell(g_SortInfoADT.array_hndl);
pf->PushCell(g_SortInfoADT.hndl);
pf->PushCell(g_SortInfoADT.data);
pf->Invoke(&result);

return result;
Expand Down Expand Up @@ -681,7 +681,7 @@ static cell_t sm_SortADTArrayCustom(IPluginContext *pContext, const cell_t *para
g_SortInfoADT.array_base = array;
g_SortInfoADT.array_bsize = (cell_t) blocksize;
g_SortInfoADT.array_hndl = params[1];
g_SortInfoADT.hndl = params[3];
g_SortInfoADT.data = params[3];
g_SortInfoADT.eh = &eh;

qsort(array, arraysize, blocksize * sizeof(cell_t), sort_adtarray_custom);
Expand Down
4 changes: 2 additions & 2 deletions plugins/include/adt_array.inc
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ methodmap ArrayList < Handle {
// Custom sorts an ADT Array. You must pass in a comparison function.
//
// @param sortfunc Sort comparison function to use
// @param hndl Optional Handle to pass through the comparison calls.
public native void SortCustom(SortFuncADTArray sortfunc, Handle hndl=INVALID_HANDLE);
// @param data Optional Handle or value to pass through the comparison calls.
public native void SortCustom(SortFuncADTArray sortfunc, any data=0);

// Retrieve the size of the array.
property int Length {
Expand Down
28 changes: 12 additions & 16 deletions plugins/include/sorting.inc
Original file line number Diff line number Diff line change
Expand Up @@ -90,22 +90,22 @@ native void SortStrings(char[][] array, int array_size, SortOrder order = Sort_A
* @param elem1 First element to compare.
* @param elem2 Second element to compare.
* @param array Array that is being sorted (order is undefined).
* @param hndl Handle optionally passed in while sorting.
* @param data Handle or value optionally passed in while sorting.
* @return -1 if first should go before second
* 0 if first is equal to second
* 1 if first should go after second
*/
typedef SortFunc1D = function int (int elem1, int elem2, const int[] array, Handle hndl);
typedef SortFunc1D = function int (any elem1, any elem2, const any[] array, any data);

/**
* Sorts a custom 1D array. You must pass in a comparison function.
*
* @param array Array to sort.
* @param array_size Size of the array to sort.
* @param sortfunc Sort function.
* @param hndl Optional Handle to pass through the comparison calls.
* @param data Optional Handle or value to pass through the comparison calls.
*/
native void SortCustom1D(int[] array, int array_size, SortFunc1D sortfunc, Handle hndl=INVALID_HANDLE);
native void SortCustom1D(any[] array, int array_size, SortFunc1D sortfunc, any data=0);

/**
* Sort comparison function for 2D array elements (sub-arrays).
Expand All @@ -114,26 +114,22 @@ native void SortCustom1D(int[] array, int array_size, SortFunc1D sortfunc, Handl
* @param elem1 First array to compare.
* @param elem2 Second array to compare.
* @param array Array that is being sorted (order is undefined).
* @param hndl Handle optionally passed in while sorting.
* @param data Handle or value optionally passed in while sorting.
* @return -1 if first should go before second
* 0 if first is equal to second
* 1 if first should go after second
*/
typeset SortFunc2D
{
function int (int[] elem1, int[] elem2, const int[][] array, Handle hndl);
function int (char[] elem1, char[] elem2, const char[][] array, Handle hndl);
};
typedef SortFunc2D = function int (any[] elem1, any[] elem2, const any[][] array, any data);

/**
* Sorts a custom 2D array. You must pass in a comparison function.
*
* @param array Array to sort.
* @param array_size Size of the major array to sort (first index, outermost).
* @param sortfunc Sort comparison function to use.
* @param hndl Optional Handle to pass through the comparison calls.
* @param data Optional Handle or value to pass through the comparison calls.
*/
native void SortCustom2D(any[][] array, int array_size, SortFunc2D sortfunc, Handle hndl=INVALID_HANDLE);
native void SortCustom2D(any[][] array, int array_size, SortFunc2D sortfunc, any data=0);

/**
* Sort an ADT Array. Specify the type as Integer, Float, or String.
Expand All @@ -152,18 +148,18 @@ native void SortADTArray(Handle array, SortOrder order, SortType type);
* @param index1 First index to compare.
* @param index2 Second index to compare.
* @param array Array that is being sorted (order is undefined).
* @param hndl Handle optionally passed in while sorting.
* @param data Handle or value optionally passed in while sorting.
* @return -1 if first should go before second
* 0 if first is equal to second
* 1 if first should go after second
*/
typedef SortFuncADTArray = function int (int index1, int index2, Handle array, Handle hndl);
typedef SortFuncADTArray = function int (int index1, int index2, Handle array, any data);

/**
* Custom sorts an ADT Array. You must pass in a comparison function.
*
* @param array Array Handle to sort
* @param sortfunc Sort comparison function to use
* @param hndl Optional Handle to pass through the comparison calls.
* @param data Optional Handle or value to pass through the comparison calls.
*/
native void SortADTArrayCustom(Handle array, SortFuncADTArray sortfunc, Handle hndl=INVALID_HANDLE);
native void SortADTArrayCustom(Handle array, SortFuncADTArray sortfunc, any data=0);