From c93aa4c90df7a814a076ebc8d92cc94d4fa96910 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 15 Mar 2024 13:59:56 -0700 Subject: [PATCH] minor libutils improvements --- libs/utils/include/utils/FixedCapacityVector.h | 10 ++++++++++ libs/utils/include/utils/bitset.h | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libs/utils/include/utils/FixedCapacityVector.h b/libs/utils/include/utils/FixedCapacityVector.h index f399012485..d734117a35 100644 --- a/libs/utils/include/utils/FixedCapacityVector.h +++ b/libs/utils/include/utils/FixedCapacityVector.h @@ -299,6 +299,16 @@ public: } } + UTILS_NOINLINE + void shrink_to_fit() { + if (size() < capacity()) { + FixedCapacityVector t(construct_with_capacity, size(), allocator()); + t.mSize = size(); + std::uninitialized_move(begin(), end(), t.begin()); + this->swap(t); + } + } + private: enum construct_with_capacity_tag{ construct_with_capacity }; diff --git a/libs/utils/include/utils/bitset.h b/libs/utils/include/utils/bitset.h index 281e5dfcf2..8844fdb80a 100644 --- a/libs/utils/include/utils/bitset.h +++ b/libs/utils/include/utils/bitset.h @@ -60,6 +60,11 @@ public: std::fill(std::begin(storage), std::end(storage), 0); } + template> + explicit bitset(U value) noexcept { + storage[0] = value; + } + T getBitsAt(size_t n) const noexcept { assert_invariant(n