# HG changeset patch # User Franz Glasner # Date 1726741318 -7200 # Node ID c450fd0eaddb8e36a0502e9f68adbfc84224856f # Parent 0ad7b2120e7497824aa09fc025a80be2cfb3ff16 farray.sh: Generalized indices for falist_tryget_{item,key,value}_at_index() diff -r 0ad7b2120e74 -r c450fd0eaddb share/local-bsdtools/farray.sh --- a/share/local-bsdtools/farray.sh Thu Sep 19 12:15:33 2024 +0200 +++ b/share/local-bsdtools/farray.sh Thu Sep 19 12:21:58 2024 +0200 @@ -1602,8 +1602,9 @@ [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name" shift _farr_alist_get_meta "$@" - [ $# -lt 2 ] && _farr_fatal "missing index" - __farr_index=$(($2 + 0)) + __farr_index="${2-}" + [ -z "${__farr_index}" ] && _farr_fatal "missing index" + _farr_make_index __farr_index "${__farr_index}" "${__farr_len}" if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then eval __farr_getikey=\"\$\{${__farr_keyname}_${__farr_index}+SET\}\" @@ -1647,8 +1648,9 @@ [ -z "${__farr_varname}" ] && _farr_fatal "missing variable name" shift _farr_alist_get_meta "$@" - [ $# -lt 2 ] && _farr_fatal "missing index" - __farr_index=$(($2 + 0)) + __farr_index="${2-}" + [ -z "${__farr_index}" ] && _farr_fatal "missing index" + _farr_make_index __farr_index "${__farr_index}" "${__farr_len}" if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then eval __farr_getival=\"\$\{${__farr_valname}_${__farr_index}+SET\}\" @@ -1696,8 +1698,9 @@ [ -z "${__farr_value_varname}" ] && _farr_fatal "missing variable name for value" shift 2 _farr_alist_get_meta "$@" - [ $# -lt 2 ] && _farr_fatal "missing index" - __farr_index=$(($2 + 0)) + __farr_index="${2-}" + [ -z "${__farr_index}" ] && _farr_fatal "missing index" + _farr_make_index __farr_index "${__farr_index}" "${__farr_len}" if [ \( ${__farr_index} -ge 1 \) -a \( ${__farr_index} -le ${__farr_len} \) ]; then eval __farr_getikey=\"\$\{${__farr_keyname}_${__farr_index}+SET\}\" diff -r 0ad7b2120e74 -r c450fd0eaddb tests/farray-alist.t --- a/tests/farray-alist.t Thu Sep 19 12:15:33 2024 +0200 +++ b/tests/farray-alist.t Thu Sep 19 12:21:58 2024 +0200 @@ -162,6 +162,39 @@ $ check_no_alist_artifacts +Valid and Invalid Indices + + $ falist_create LIST + $ falist_set LIST 'KEY 1' 'VAL 1' + $ falist_set LIST 'KEY 2' 'VAL 2' + $ falist_set LIST 'KEY 3' 'VAL 3' + + $ (falist_tryget_item_at_index _k _v LIST "") + ERROR: missing index + [70] + + $ (falist_tryget_item_at_index _k _v LIST) + ERROR: missing index + [70] + + $ falist_tryget_item_at_index _k _v LIST 4 + [1] + + $ falist_tryget_item_at_index _k _v LIST 0 + $ printf '%s:%s' "$_k" "$_v" + KEY 3:VAL 3 (no-eol) + + $ falist_tryget_item_at_index _k _v LIST -2 + $ printf '%s:%s' "$_k" "$_v" + KEY 1:VAL 1 (no-eol) + + $ falist_tryget_item_at_index _k _v LIST -3 + [1] + + $ falist_destroy LIST + $ check_no_alist_artifacts + + Deletion of keys ================