ericboesch / bitset

Bitset implementation for Ruby
MIT License
9 stars 7 forks source link

Added several mutable functions #1

Closed gabrielformica closed 7 years ago

gabrielformica commented 7 years ago

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).

ericboesch commented 7 years ago

I think mutable functions are a valuable addition. I may try to add some tests and documentation. Thanks!