iqdemat
6/3/2016 - 9:04 AM

A stack is an XQuery map-based structure.

A stack is an XQuery map-based structure.

module namespace stack = "http://optum.com/ns/stack/";

declare function stack:new($seq as item()*) as map:map {
    map:new((map:entry("stack",$seq)))
};

declare function stack:push($stack as map:map,$item as item()) {
    map:put($stack,"stack",($item,map:get($stack,"stack")))
};

declare function stack:pop($stack as map:map) as item() {
    let $stack-seq := map:get($stack,"stack")
    let $head := fn:head($stack-seq)
    let $_ := map:put($stack,"stack",fn:tail($stack-seq))
    return $head
};

declare function stack:show($stack as map:map) as item()* {
    map:get($stack,"stack")
};

declare function stack:draw($stack as map:map,$ct as xs:double) as item()* {
    for $index in (1 to $ct) return stack:pop($stack)
};

declare function stack:peek($stack as map:map,$ct as xs:double) as item()* {
    fn:subsequence(map:get($stack,"stack"),1,$ct)
}; 

declare function stack:clear($stack as map:map) as item()* {
    let $stack-seq := stack:show($stack)
    let $_ := map:put($stack,"stack",())
    return $stack-seq
};

declare function stack:count($stack as map:map) as xs:long {
fn:count(map:get($stack,"stack"))
};