summaryrefslogtreecommitdiffstats
path: root/src/common/scratch_buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/scratch_buffer.h')
-rw-r--r--src/common/scratch_buffer.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/common/scratch_buffer.h b/src/common/scratch_buffer.h
index 59bb8a9ea..1245a5086 100644
--- a/src/common/scratch_buffer.h
+++ b/src/common/scratch_buffer.h
@@ -25,8 +25,21 @@ public:
~ScratchBuffer() = default;
/// This will only grow the buffer's capacity if size is greater than the current capacity.
+ /// The previously held data will remain intact.
void resize(size_t size) {
if (size > buffer_capacity) {
+ auto new_buffer = Common::make_unique_for_overwrite<T[]>(size);
+ std::move(buffer.get(), buffer.get() + buffer_capacity, new_buffer.get());
+ buffer = std::move(new_buffer);
+ buffer_capacity = size;
+ }
+ last_requested_size = size;
+ }
+
+ /// This will only grow the buffer's capacity if size is greater than the current capacity.
+ /// The previously held data will be destroyed if a reallocation occurs.
+ void resize_destructive(size_t size) {
+ if (size > buffer_capacity) {
buffer_capacity = size;
buffer = Common::make_unique_for_overwrite<T[]>(buffer_capacity);
}
@@ -61,6 +74,10 @@ public:
return buffer[i];
}
+ [[nodiscard]] const T& operator[](size_t i) const {
+ return buffer[i];
+ }
+
[[nodiscard]] size_t size() const noexcept {
return last_requested_size;
}