Merge pull request #213 from splewis/find-array-nonzero-blocks

Add block parameter to FindValueInArray native.
This commit is contained in:
Asher Baker 2015-02-24 22:37:49 +00:00 committed by Asher Baker
parent 6fb9e1b30e
commit 784f9f4993
2 changed files with 64 additions and 48 deletions

View File

@ -550,9 +550,22 @@ static cell_t FindValueInArray(IPluginContext *pContext, const cell_t *params)
return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err);
} }
// the blocknumber is not guaranteed to always be passed
size_t blocknumber = 0;
if (params[0] >= 3)
{
blocknumber = (size_t) params[3];
}
if (blocknumber >= array->blocksize())
{
return pContext->ThrowNativeError("Invalid block %d (blocksize: %d)", blocknumber, array->blocksize());
}
for (unsigned int i = 0; i < array->size(); i++) for (unsigned int i = 0; i < array->size(); i++)
{ {
if (params[2] == *array->at(i)) cell_t *blk = array->at(i);
if (params[2] == blk[blocknumber])
{ {
return (cell_t) i; return (cell_t) i;
} }

View File

@ -202,8 +202,10 @@ methodmap ArrayList < Handle {
// value cannot be located, -1 will be returned. // value cannot be located, -1 will be returned.
// //
// @param item Value to search for // @param item Value to search for
// @param block Optionally which block to search in
// @return Array index, or -1 on failure // @return Array index, or -1 on failure
public native int FindValue(any item); // @error Invalid block index
public native int FindValue(any item, int block=0);
// Retrieve the size of the array. // Retrieve the size of the array.
property int Length { property int Length {
@ -431,7 +433,8 @@ native int FindStringInArray(Handle array, const char[] item);
* *
* @param array Array Handle. * @param array Array Handle.
* @param item Value to search for * @param item Value to search for
* @param block Optionally which block to search in
* @return Array index, or -1 on failure * @return Array index, or -1 on failure
* @error Invalid Handle * @error Invalid Handle or invalid block
*/ */
native int FindValueInArray(Handle array, any item); native int FindValueInArray(Handle array, any item, int block=0);