From: Simon Marchi Date: Tue, 28 Jun 2022 18:26:53 +0000 (-0400) Subject: cpp-common: add vectorFastRemove X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=519e0bfec039cb46fde02e00f9443239b21f3fe2 cpp-common: add vectorFastRemove Add the vectorFastRemove function, in src/cpp-common/vector.hpp, as a drop-in replacement for g_ptr_array_remove_index_fast, when replacing a GPtrArray with an std::vector. Signed-off-by: Simon Marchi Change-Id: Ibee249fd9a8168d02ad99abf36984bf7edd53b5b Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8493 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/10837 CI-Build: Philippe Proulx Tested-by: jenkins --- diff --git a/src/cpp-common/Makefile.am b/src/cpp-common/Makefile.am index cfe4efd1..e6d9602a 100644 --- a/src/cpp-common/Makefile.am +++ b/src/cpp-common/Makefile.am @@ -16,4 +16,5 @@ EXTRA_DIST = bt2 \ make-unique.hpp \ safe-ops.hpp \ align.hpp \ - uuid.hpp + uuid.hpp \ + vector.hpp diff --git a/src/cpp-common/vector.hpp b/src/cpp-common/vector.hpp new file mode 100644 index 00000000..0f0f2024 --- /dev/null +++ b/src/cpp-common/vector.hpp @@ -0,0 +1,30 @@ +#ifndef SRC_CPP_COMMON_VECTOR_HPP +#define SRC_CPP_COMMON_VECTOR_HPP + +#include +#include "common/assert.h" + +namespace bt2_common { + +/* + * Moves the last entry of `vec` to the index `idx`, then removes the last entry. + * + * Meant to be a direct replacement for g_ptr_array_remove_index_fast(), but for + * `std::vector`. + */ +template +void vectorFastRemove(std::vector& vec, + const typename std::vector::size_type idx) +{ + BT_ASSERT_DBG(idx < vec.size()); + + if (idx < vec.size() - 1) { + vec[idx] = std::move(vec.back()); + } + + vec.pop_back(); +} + +} /* namespace bt2_common */ + +#endif /* SRC_CPP_COMMON_VECTOR_HPP */