Hi!
I've been playing a bit with Nim's sets to check if I can use them for my application.
In particular, I have to deal with a huge amount of sets, so I look for as much memory efficiency as possible.
From what I have seen, it seems the standard set would fit my needs. This would be a simplification for my Container object:
include prelude
type Container = ref object
max_val: int
sets: HashSet[set[uint16]]
proc newContainer(max_val: int): Container =
Container(
max_val: max_val,
sets: HashSet[set[uint16]](),
)
proc add(c: Container, val: set[uint16]) =
c.sets.incl(val)
proc remove(c: Container, val: set[uint16]) =
c.sets.excl(val)
proc show(c: Container) =
echo c.sets
I would like to limit the size of the inner sets as much as possible. I have seen that this can be achieved through Subranges, but I couldn't find out how could this be done in a dynamic way. For example, in my case, I would like to replace the uint16 type with a more restricted bound according to max_val, as for most cases max_val will be much smaller than high(uint16).
Thank you for your time and your help!
See the example here, it puts high(int32) in a high(uint16) set:
https://github.com/nim-lang/Nim/wiki/Nim-for-Python-Programmers#Sets