// native ArrayInsertCellBefore(Array:which, item, const any:input); static cell AMX_NATIVE_CALL ArrayInsertCellBefore(AMX* amx, cell* params) { CellArray* vec = HandleToVector(amx, params[1]); if (vec == NULL) { return 0; } size_t idx = params[2]; if (idx >= vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", idx, vec->size()); return 0; } *vec->insert_at(idx) = params[3]; return 1; }
static cell_t ShiftArrayUp(IPluginContext *pContext, const cell_t *params) { CellArray *array; HandleError err; HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent); if ((err = handlesys->ReadHandle(params[1], htCellArray, &sec, (void **)&array)) != HandleError_None) { return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err); } size_t idx = (size_t)params[2]; if (idx >= array->size()) { return pContext->ThrowNativeError("Invalid index %d (count: %d)", idx, array->size()); } array->insert_at(idx); return 1; }
// native ArrayInsertCellBefore(Array:which, item, const any:input); static cell AMX_NATIVE_CALL ArrayInsertCellBefore(AMX* amx, cell* params) { CellArray* vec = ArrayHandles.lookup(params[1]); if (!vec) { LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", params[1]); return 0; } size_t idx = params[2]; if (idx >= vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", idx, vec->size()); return 0; } *vec->insert_at(idx) = params[3]; return 1; }
// native ArrayInsertStringBefore(Array:which, item, const input[]); static cell AMX_NATIVE_CALL ArrayInsertStringBefore(AMX* amx, cell* params) { CellArray* vec = HandleToVector(amx, params[1]); if (vec == NULL) { return 0; } size_t idx = params[2]; if (idx >= vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringBefore (%d:%d)", idx, vec->size()); return 0; } int len; const char *str = get_amxstring(amx, params[3], 0, len); return strncopy(vec->insert_at(idx), str, ke::Min((size_t)len + 1, vec->blocksize())); }
// native ArrayInsertStringAfter(Array:which, item, const input[]); static cell AMX_NATIVE_CALL ArrayInsertStringAfter(AMX* amx, cell* params) { CellArray* vec = ArrayHandles.lookup(params[1]); if (!vec) { LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", params[1]); return 0; } size_t idx = params[2] + 1; if (idx > vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringAfter (%d:%d)", idx, vec->size()); return 0; } int len; const char *str = get_amxstring(amx, params[3], 0, len); return strncopy(vec->insert_at(idx), str, ke::Min((size_t)len + 1, vec->blocksize())); }
// native ArrayInsertArrayBefore(Array:which, item, const any:input[]); static cell AMX_NATIVE_CALL ArrayInsertArrayBefore(AMX* amx, cell* params) { CellArray* vec = HandleToVector(amx, params[1]); if (vec == NULL) { return 0; } size_t idx = params[2]; if (idx >= vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayBefore (%d:%d)", idx, vec->size()); return 0; } cell *addr = get_amxaddr(amx, params[3]); memcpy(vec->insert_at(idx), addr, vec->blocksize() * sizeof(cell)); return 1; }
// native ArrayInsertArrayAfter(Array:which, item, const any:input[]); static cell AMX_NATIVE_CALL ArrayInsertArrayAfter(AMX* amx, cell* params) { CellArray* vec = ArrayHandles.lookup(params[1]); if (!vec) { LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", params[1]); return 0; } size_t idx = params[2] + 1; if (idx > vec->size()) { LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayAfter (%d:%d)", idx, vec->size()); return 0; } cell *addr = get_amxaddr(amx, params[3]); memcpy(vec->insert_at(idx), addr, sizeof(cell) * vec->blocksize()); return 1; }