Specialize {get,put}_array for regular arrays
This commit is contained in:
parent
4b2d6fcabb
commit
e933bc443a
97
rowbot
97
rowbot
|
@ -17,30 +17,57 @@ put_array() {
|
|||
# The variable named array is a nameref to an array
|
||||
# shellcheck disable=SC2178
|
||||
declare -n array=$1
|
||||
declare -n scalar=ARR_${1^^}
|
||||
local key
|
||||
declare -n scalar=RB_A_${1^^}
|
||||
local val
|
||||
|
||||
for key in "${!array[@]}"; do
|
||||
scalar+=${#key}:$key${array[$key]}$'\n'
|
||||
for val in "${array[@]}"; do
|
||||
scalar+=${#val}:$val
|
||||
done
|
||||
|
||||
scalar=${scalar%$'\n'}
|
||||
export "ARR_${1^^}"
|
||||
export "RB_A_${1^^}"
|
||||
}
|
||||
|
||||
get_array() {
|
||||
declare -n scalar=ARR_${1^^}
|
||||
declare -n array=$1
|
||||
local entry idx_size
|
||||
declare -n scalar=RB_A_${1^^}
|
||||
local len val idx=0
|
||||
|
||||
while read -r entry; do
|
||||
idx_size=${entry%%:*} entry=${entry#"$idx_size":}
|
||||
array[${entry:0:idx_size}]=${entry:idx_size}
|
||||
done <<< "$scalar"
|
||||
while [[ $scalar ]]; do
|
||||
len=${scalar%%:*} scalar=${scalar#"$len":}
|
||||
val=${scalar:0:len} scalar=${scalar:len}
|
||||
array[$idx]=$val
|
||||
(( idx += 1 ))
|
||||
done
|
||||
|
||||
unset "RB_A_${1^^}"
|
||||
}
|
||||
|
||||
is_good_variable() {
|
||||
[[ $1 =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]
|
||||
b64_encode() {
|
||||
local idx=0 numerics table_idxs table_idx encoded
|
||||
local table=( {A..Z} {a..z} {0..9} + / )
|
||||
|
||||
for (( ; idx < ${#1}; idx+=3 )); do
|
||||
read -ra numerics < <(
|
||||
printf '%d %d %d\n' "'${1:idx:1}" "'${1:idx+1:1}" "'${1:idx+2:1}"
|
||||
)
|
||||
|
||||
(( table_idxs[0] = numerics[0] >> 2 ))
|
||||
(( table_idxs[1] = (( (numerics[0] & 0x03) << 6) | (numerics[1] & 0xF0) >> 2) >> 2 ))
|
||||
(( table_idxs[2] = (( (numerics[1] & 0x0F) << 4) | (numerics[2] & 0xC0) >> 4) >> 2 ))
|
||||
(( table_idxs[3] = numerics[2] & 0x3F ))
|
||||
|
||||
for table_idx in "${table_idxs[@]}"; do
|
||||
encoded+=${table[$table_idx]}
|
||||
done
|
||||
done
|
||||
|
||||
if (( ${#1} % 3 == 1 )); then
|
||||
encoded=${encoded::-2}==
|
||||
elif (( ${#1} % 3 == 2 )); then
|
||||
encoded=${encoded::-1}=
|
||||
fi
|
||||
|
||||
prints %s "$encoded"
|
||||
}
|
||||
|
||||
# code reloading helpers
|
||||
|
@ -62,12 +89,8 @@ get_option() {
|
|||
fi
|
||||
}
|
||||
|
||||
is_parent() {
|
||||
(( BASHPID == $$ ))
|
||||
}
|
||||
|
||||
is_reloaded() {
|
||||
[[ $RELOADED = yes ]] || (( LORE_LIVES > 1 ))
|
||||
[[ $RELOADED = yes ]] || (( RELOAD_COUNT ))
|
||||
}
|
||||
|
||||
# message classification
|
||||
|
@ -196,34 +219,6 @@ url() {
|
|||
prints %s:%s "${config[server]}" "${config[port]}"
|
||||
}
|
||||
|
||||
b64_encode() {
|
||||
local idx=0 numerics table_idxs table_idx encoded
|
||||
local table=( {A..Z} {a..z} {0..9} + / )
|
||||
|
||||
for (( ; idx < ${#1}; idx+=3 )); do
|
||||
read -ra numerics < <(
|
||||
printf '%d %d %d\n' "'${1:idx:1}" "'${1:idx+1:1}" "'${1:idx+2:1}"
|
||||
)
|
||||
|
||||
(( table_idxs[0] = numerics[0] >> 2 ))
|
||||
(( table_idxs[1] = (((numerics[0] & 0x03) << 6) | (numerics[1] & 0xF0) >> 2) >> 2 ))
|
||||
(( table_idxs[2] = (((numerics[1] & 0x0F) << 4) | (numerics[2] & 0xC0) >> 4) >> 2 ))
|
||||
(( table_idxs[3] = numerics[2] & 0x3F ))
|
||||
|
||||
for table_idx in "${table_idxs[@]}"; do
|
||||
encoded+=${table[$table_idx]}
|
||||
done
|
||||
done
|
||||
|
||||
if (( ${#1} % 3 == 1 )); then
|
||||
encoded=${encoded::-2}==
|
||||
elif (( ${#1} % 3 == 2 )); then
|
||||
encoded=${encoded::-1}=
|
||||
fi
|
||||
|
||||
prints %s "$encoded"
|
||||
}
|
||||
|
||||
###
|
||||
# configure rowbot's environment
|
||||
###
|
||||
|
@ -902,8 +897,12 @@ irc_who() {
|
|||
# plugin api
|
||||
###
|
||||
|
||||
plugin_is_good_variable() {
|
||||
[[ $1 =~ ^[A-Za-z_][A-Za-z0-9_]+$ ]]
|
||||
}
|
||||
|
||||
plugin_reg() {
|
||||
if ! is_good_variable irc_plugin_array_"$1"; then
|
||||
if ! plugin_is_good_variable irc_plugin_array_"$1"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
@ -927,7 +926,7 @@ plugin_run() {
|
|||
# This is a false positive.
|
||||
# shellcheck disable=SC2178
|
||||
|
||||
if is_good_variable irc_plugin_array_"$1" && [[ -v irc_plugin_array_"$1" ]]; then
|
||||
if plugin_is_good_variable irc_plugin_array_"$1" && [[ -v irc_plugin_array_"$1" ]]; then
|
||||
declare -n plugins=irc_plugin_array_"$1"
|
||||
shift
|
||||
local plugin
|
||||
|
|
Loading…
Reference in New Issue