intbitset: code and performance improvements
- Removes unused intBitSetCreateNoAllocate() C function.
- Uses unsigned int when possible (in intBitSetResize(), intBitSetIsInElem(), intBitSetAddElem(), intBitSetDelElem()).
- Removes two warnings about const assignment when compiling C code.
- Improves intbitset.init() to recognize tuple of tuple results coming from SQLAlchemy (where the objects are not real tuples but proxy to them). This avoid a segmentation fault when providing intbitset with direct results from SQLAlchemy queries.
- Removes deprecated .to_sorted_list() and .get_sorted_element() intbitset methods which are superseeded by full implementation of .getitem() introduced in 54b99b93e343e172cab4fbe82f4a61800c52a1f6
- Fixes a couple of bugs in new .getitem() implementation.
- Makes .difference(), .difference_update(), .intersection(), .intersection_update(), .union(), .union_update(), .symmetric_difference(), .symmetric_difference_update() as real aliases of respectively sub, isub, and, iand, or, ior, xor, ixor.
- Rewrites several C loops in order to trigger automatic loop vectorization on CPU with dedicated machine instructions, thus achieving performance improvements in intBitSetResize(), intBitSetSub(), intBitSetISub()
- Improves intBitSetResetFromBuffer() to free memory and realloc only when the incoming buffer is larger.
- Improves intBitSetGetTot() by using __builtin_popcountl() to count bits in a long word, thus improving speed of this function by an order of magnitude.
- Adds new unit test for len().