Skip to content

Commit 6b2c2f9

Browse files
committed
Allow bvector<>::clear() for read-only frozen vectors
1 parent 6df8402 commit 6b2c2f9

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/bm.h

+16-2
Original file line numberDiff line numberDiff line change
@@ -1270,13 +1270,13 @@ class bvector
12701270
\param free_mem if "true" (default) bvector frees the memory,
12711271
otherwise sets blocks to 0.
12721272
*/
1273-
void clear(bool free_mem = true) { blockman_.set_all_zero(free_mem); }
1273+
void clear(bool free_mem = true) BMNOEXCEPT;
12741274

12751275
/*!
12761276
\brief Clears every bit in the bitvector.
12771277
\return *this;
12781278
*/
1279-
bvector<Alloc>& reset() { clear(true); return *this; }
1279+
bvector<Alloc>& reset() BMNOEXCEPT { clear(true); return *this; }
12801280

12811281
/*!
12821282
\brief Flips bit n
@@ -4121,6 +4121,20 @@ void bvector<Alloc>::keep(const size_type* ids, size_type ids_size,
41214121

41224122
// -----------------------------------------------------------------------
41234123

4124+
template<class Alloc>
4125+
void bvector<Alloc>::clear(bool free_mem) BMNOEXCEPT
4126+
{
4127+
if (is_ro())
4128+
{
4129+
BM_ASSERT(free_mem);
4130+
blockman_.destroy_arena();
4131+
}
4132+
else
4133+
blockman_.set_all_zero(free_mem);
4134+
}
4135+
4136+
// -----------------------------------------------------------------------
4137+
41244138
template<class Alloc>
41254139
void bvector<Alloc>::clear(const size_type* ids,
41264140
size_type ids_size, bm::sort_order so)

0 commit comments

Comments
 (0)