/**
* Get and set values in the configuration table.
*/
module util/config/common
imports
collection/hash-table/common
strategies
/**
* Get the value for the specified key from the config table.
* The key is the current term.
*/
get-config =
<table-get> ("config", <id>)
/**
* Get all values of config keys for which 'pred' succeeds.
* The current term is ignored.
*
* @returns The list of values for the keys that satisfy pred.
* @param Is applied to the keys of the config table.
* @type _ -> List(b)
*/
get-configs(pred) =
<table-getlist> "config"
; filter((pred,id); Snd)
/**
* Get all config keys for which pred succeeds
*
* @returns The list of keys that satisfy pred.
* @param Is applied to the keys of the config table.
* @type _ -> List(a)
*/
get-config-keys(pred) =
<table-getlist> "config"
; filter((pred,id); Fst)
strategies
/**
* Set an entry (key and value) in the config table.
*
* @type (a, b) -> _
*/
set-config =
?(key, val)
; <table-put> ("config", key, val)
/**
* Remove the entry of the specified key from the config table.
*
* @type (a, b) -> _
*/
rm-config =
?key
; <table-remove> ("config", key)
/**
* Adds an entry to the config table if it does not exist, or
* removes the entry if it does already exist in the config table.
*
* @type (a, b) -> _
*/
toggle-config =
?(key, val)
; if <get-config> key then
<table-remove> ("config", key)
else
<set-config> (key, val)
end
/**
* Extends the list of values of the specified key with new values.
* The values are added in front of the current list.
*
* @type (a, List(b)) -> _
*/
extend-config =
?(key, val)
; <table-put> ("config", key, <conc> (val, <get-config <+ ![]> key))
/**
* Extends the list of values of the specified key with new values.
* The values are added to the end of the current list.
*
* @type (a, List(b)) -> _
*/
post-extend-config =
?(key, val)
; <table-put> ("config", key, <conc> (<get-config <+ ![]> key, val))