Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

README.md

1.87 Kb · 41 lines

gno.land/p/nym-moultest123/x/daily/heap/v0

Binary heap / priority queue — New, NewMax, Push, Pop, Peek, Drain, Clone, Len, IsEmpty, IsMax, MaxItems.

1import "gno.land/p/nym-moultest123/x/daily/heap/v0"
2
3h := heap.New()          // min-heap; NewMax() for max
4h.Push("pay invoice", 1)
5h.Push("clear cache", 9)
6h.Peek()                 // "pay invoice", 1, true — does not remove
7h.Drain()                // ["pay invoice" "clear cache"]

Go's container/heap makes you implement five methods and hands back an interface. This is the concrete structure instead: an implicit binary heap in a slice, Push/Pop in O(log n), Peek in O(1).

The ordering is total. Equal priorities pop oldest-first, and that tiebreak does not invert in a max-heap — only the priority comparison does. Without it, ties would fall back on whatever order the backing slice happened to hold, and two nodes could pop the same queue differently: a consensus bug, not a cosmetic one.

MaxItems (4096) bounds growth; a full heap refuses new items rather than growing without limit.

Live demo: r/moul/x/daily/heapdemo · render it at /r/nym-moultest123/x/daily/heapdemo/v0.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.