added #union_mutable, #intersect_mutable, #difference_mutable, #xor_mutable and #reset.
I found with a problem in which I needed to make several OR operations in a tree with thousands and thousands of nodes, where NODE.or |= NODE.child[i].or for every i-th child. So, ruby was creating
a lot of bitsets (one for every OR operation, and ended up using all my ram).
Since every time a NODE has merged its CHILD.or into it, this CHILD.or wasn't needed anymore, then I could track those Bitsets created and re-use (that's way the reason of #reset) them so Ruby woudn't have to create more Bitsets, wasting RAM (Garbage Collector wasn't deleting as frequent as NODE.or I was creating, and making a manual call to GC was slowing down this task by several minutes).
added #union_mutable, #intersect_mutable, #difference_mutable, #xor_mutable and #reset.
I found with a problem in which I needed to make several OR operations in a tree with thousands and thousands of nodes, where NODE.or |= NODE.child[i].or for every i-th child. So, ruby was creating a lot of bitsets (one for every OR operation, and ended up using all my ram). Since every time a NODE has merged its CHILD.or into it, this CHILD.or wasn't needed anymore, then I could track those Bitsets created and re-use (that's way the reason of #reset) them so Ruby woudn't have to create more Bitsets, wasting RAM (Garbage Collector wasn't deleting as frequent as NODE.or I was creating, and making a manual call to GC was slowing down this task by several minutes).