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

/p/moul/x/daily/bitset/v0

Directory · 3 Files
README.md Open

gno.land/p/moul/x/daily/bitset/v0

Dense fixed-capacity bit vectorNew, FromSlice, Set, Clear, Flip, Has, Count, Slice, Clone, Union, Intersect, Difference, SymmetricDifference, Equal, MaxBits.

A compact set of small non-negative integers. Storage is []uint64 of ceil(n/64) words, so 1024 bits cost 16 words instead of 1024 booleans — the reason to reach for this on chain, where every byte is paid for.

1import "gno.land/p/moul/x/daily/bitset/v0"
2
3b := bitset.FromSlice(20, []int{1, 2, 3})
4c := bitset.FromSlice(20, []int{3, 4})
5bitset.Union(b, c).Slice()       // [1 2 3 4]
6bitset.Intersect(b, c).Slice()   // [3]
7b.Count()                        // 3

Capacity is fixed at construction: operations are bounds-checked and return false out of range rather than growing, because silent growth would make gas unpredictable. Has on an out-of-range index is simply false — something that cannot be a member is not a member.

Combining two sets of different capacities returns nil rather than padding one silently; a size mismatch is a caller error worth surfacing.

MaxBits (65536) caps allocation. Note String() prints bit 0 first, so it reads in index order — the reverse of binary notation.

Live demo: r/moul/x/daily/bitsetdemo · render it at /r/moul/x/daily/bitsetdemo/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.