Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 607:c450fd0eaddb
farray.sh: Generalized indices for falist_tryget_{item,key,value}_at_index()
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 19 Sep 2024 12:21:58 +0200 |
| parents | 0ad7b2120e74 |
| children | cd9d5127ade2 |
| files | share/local-bsdtools/farray.sh tests/farray-alist.t |
| diffstat | 2 files changed, 42 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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\}\"
--- 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 ================
