]> gitweb.factorcode.org Git - factor.git/blob - extra/assoc-heaps/assoc-heaps.factor
a495aed62634319a9f43f871f4d7961c47737920
[factor.git] / extra / assoc-heaps / assoc-heaps.factor
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs hashtables heaps kernel ;
4 IN: assoc-heaps
5
6 TUPLE: assoc-heap assoc heap ;
7
8 C: <assoc-heap> assoc-heap
9
10 : <unique-min-heap> ( -- unique-heap )
11     H{ } clone <min-heap> <assoc-heap> ;
12
13 : <unique-max-heap> ( -- unique-heap )
14     H{ } clone <max-heap> <assoc-heap> ;
15
16 M: assoc-heap heap-push* ( value key assoc-heap -- entry )
17     pick over assoc>> key? [
18         3drop f
19     ] [
20         [ assoc>> swapd set-at ] [ heap>> heap-push* ] 3bi
21     ] if ;
22
23 M: assoc-heap heap-pop ( assoc-heap -- value key )
24     heap>> heap-pop ;
25
26 M: assoc-heap heap-peek ( assoc-heap -- value key )
27     heap>> heap-peek ;
28
29 M: assoc-heap heap-empty? ( assoc-heap -- value key )
30     heap>> heap-empty? ;