From 453ab0adb8ec9f6da7af1d84590e1a2d309711e7 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 13 Oct 2025 14:10:56 -1000 Subject: [PATCH] backmerge --- esphome/core/helpers.h | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 6b04af3c7c..e838c82f3e 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -180,6 +180,13 @@ template class FixedVector { } } + // Helper to reset pointers after cleanup + void reset_() { + data_ = nullptr; + capacity_ = 0; + size_ = 0; + } + public: FixedVector() = default; @@ -187,25 +194,19 @@ template class FixedVector { // Enable move semantics for use in containers FixedVector(FixedVector &&other) noexcept : data_(other.data_), size_(other.size_), capacity_(other.capacity_) { - other.data_ = nullptr; - other.size_ = 0; - other.capacity_ = 0; + other.reset_(); } FixedVector &operator=(FixedVector &&other) noexcept { if (this != &other) { // Delete our current data - if (data_ != nullptr) { - delete[] data_; - } + cleanup_(); // Take ownership of other's data data_ = other.data_; size_ = other.size_; capacity_ = other.capacity_; // Leave other in valid empty state - other.data_ = nullptr; - other.size_ = 0; - other.capacity_ = 0; + other.reset_(); } return *this; } @@ -213,9 +214,7 @@ template class FixedVector { // Allocate capacity - can be called multiple times to reinit void init(size_t n) { cleanup_(); - data_ = nullptr; - capacity_ = 0; - size_ = 0; + reset_(); if (n > 0) { // Allocate raw memory without calling constructors data_ = static_cast(::operator new(n * sizeof(T))); @@ -226,6 +225,12 @@ template class FixedVector { // Clear the vector (reset size to 0, keep capacity) void clear() { size_ = 0; } + // Shrink capacity to fit current size (frees all memory) + void shrink_to_fit() { + cleanup_(); + reset_(); + } + /// Add element without bounds checking /// Caller must ensure sufficient capacity was allocated via init() /// Silently ignores pushes beyond capacity (no exception or assertion)