@@ -960,8 +960,10 @@ namespace sham {
960960 * @brief Resizes the buffer to a given size.
961961 *
962962 * @param new_size The new size of the buffer.
963+ * @param keep_data If `true`, the content of the buffer is preserved up to the minimum of
964+ * the old and new sizes. If `false`, the content may be discarded if a reallocation occurs.
963965 */
964- inline void resize (size_t new_size) {
966+ inline void resize (size_t new_size, bool keep_data = true ) {
965967
966968 auto dev_sched = hold.get_dev_scheduler_ptr ();
967969
@@ -978,7 +980,9 @@ namespace sham {
978980 new_storage_size, get_dev_scheduler_ptr (), get_alignment (dev_sched)));
979981
980982 // copy data
981- new_buf.copy_from (*this , get_size ());
983+ if (keep_data) {
984+ new_buf.copy_from (*this , get_size ());
985+ }
982986
983987 // override old buffer
984988 std::swap (new_buf, *this );
@@ -994,7 +998,9 @@ namespace sham {
994998 new_storage_size, get_dev_scheduler_ptr (), get_alignment (dev_sched)));
995999
9961000 // copy data
997- new_buf.copy_from (*this , new_size);
1001+ if (keep_data) {
1002+ new_buf.copy_from (*this , new_size);
1003+ }
9981004
9991005 // override old buffer
10001006 std::swap (new_buf, *this );
@@ -1005,10 +1011,13 @@ namespace sham {
10051011 }
10061012 }
10071013
1014+ // / same as resize but data will not be copied if reallocation is needed
1015+ inline void resize_discard_data (size_t new_size) { resize (new_size, false ); }
1016+
10081017 /* *
1009- * @brief Alias for resize (0).
1018+ * @brief Alias for resize_discard_data (0).
10101019 */
1011- inline void free_alloc () { resize (0 ); }
1020+ inline void free_alloc () { resize_discard_data (0 ); }
10121021
10131022 /* *
10141023 * @brief Expand the buffer by `add_sz` elements.
0 commit comments