From 047a3ac9c1f2c6d34592d758f621e89a7c418bba Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Tue, 14 Mar 2017 20:27:45 +0100 Subject: [PATCH] Add bitset_swap & export it. --- m-bitset.h | 19 ++++++++++++++++++- tests/test-mbitset.c | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/m-bitset.h b/m-bitset.h index 654a2ac6..9f102391 100644 --- a/m-bitset.h +++ b/m-bitset.h @@ -239,7 +239,7 @@ bitset_capacity(bitset_t v) } static inline void -bitset_swap (bitset_t v, size_t i, size_t j) +bitset_swap_at (bitset_t v, size_t i, size_t j) { BITSETI_CONTRACT (v); assert (i < v->size && j < v->size); @@ -250,6 +250,22 @@ bitset_swap (bitset_t v, size_t i, size_t j) BITSETI_CONTRACT (v); } +static inline void +bitset_swap (bitset_t v1, bitset_t v2) +{ + BITSETI_CONTRACT (v1); + BITSETI_CONTRACT (v2); + size_t tmp = v1->size; + v1->size = v2->size; + v2->size = tmp; + tmp = v1->alloc; + v1->alloc = v2->alloc; + v2->alloc = tmp; + bitset_limb *p = v1->ptr; + v1->ptr = v2->ptr; + v2->ptr = p; +} + static inline bitset_limb bitseti_lshift(bitset_limb ptr[], size_t n, bitset_limb carry) { @@ -582,6 +598,7 @@ bitset_hash(const bitset_t dest) ,CLEAR(bitset_clear) \ ,INIT_MOVE(bitset_init_move) \ ,MOVE(bitset_move) \ + ,SWAP(bitset_swap) \ ,TYPE(bitset_t) \ ,SUBTYPE(bool) \ ,IT_TYPE(bitset_it_t) \ diff --git a/tests/test-mbitset.c b/tests/test-mbitset.c index 5f0a6e35..b9beacdd 100644 --- a/tests/test-mbitset.c +++ b/tests/test-mbitset.c @@ -112,6 +112,12 @@ static void test1(void) n++; } #endif + + assert(bitset_size(set2) == 50); + assert(bitset_size(set) == 200); + bitset_swap (set, set2); + assert(bitset_size(set) == 50); + assert(bitset_size(set2) == 200); bitset_clear(set); bitset_clear(set2);