ref: 094e3fb0ee4dd4b8aaaca40da90bf770ae42674f
dir: /lib/inifile/access.myr/
use std use bio use "types" pkg inifile = type inisectiter = struct it : std.htkviter((byte[:], byte[:]), byte[:]) ;; impl iterable inisectiter -> byte[:] /* key getting/setting */ const get : (ini : inifile#, sect : byte[:], key : byte[:] -> std.option(byte[:])) const getv : (ini : inifile#, sect : byte[:], key : byte[:], val : byte[:] -> byte[:]) const has : (ini : inifile#, sect : byte[:], key : byte[:] -> bool) const put : (ini : inifile#, sect : byte[:], key : byte[:], val : byte[:] -> void) const bysection : (ini : inifile# -> inisectiter) ;; const get = {ini, sect, key -> std.htget(ini.elts, (sect, key)) } const getv = {ini, sect, key, val -> std.htgetv(ini.elts, (sect, key), val) } const has = {ini, sect, key -> std.hthas(ini.elts, (sect, key)) } const put = {ini, sect, key, val if std.hthas(ini.elts, (sect, key)) std.slfree(std.htgetv(ini.elts, (sect, key), "")) else sect = std.sldup(sect) key = std.sldup(key) ;; std.htput(ini.elts, (sect, key), std.sldup(val)) } const bysection = {ini -> [.it=std.htbykeyvals(ini.elts)] } impl iterable inisectiter -> byte[:] = __iternext__ = {itp, valp : byte[:]# var kvp : ((byte[:], byte[:]), byte[:]) if __iternext__(&itp.it, &kvp) match kvp | ((s, _), _): valp# = s ;; -> true ;; -> false } __iterfin__ = {itp, valp -> void } ;;