From bcba580546807c4b6e138300a410f1dc63fb02b9 Mon Sep 17 00:00:00 2001 From: Stefan Klug Date: Thu, 3 Apr 2025 17:49:09 +0200 Subject: [PATCH] libcamera: vector: Add a Span based constructor When one wants to create a Vector from existing data, currently the only way is via std::array. Add a Span based constructor to allow creation from std::vectors and alike. While at it, replace the manual loop with std::copy. Signed-off-by: Stefan Klug Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham Reviewed-by: Paul Elder --- include/libcamera/internal/vector.h | 8 ++++++-- src/libcamera/vector.cpp | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h index a67a09474..4e9ef1ee6 100644 --- a/include/libcamera/internal/vector.h +++ b/include/libcamera/internal/vector.h @@ -42,8 +42,12 @@ public: constexpr Vector(const std::array &data) { - for (unsigned int i = 0; i < Rows; i++) - data_[i] = data[i]; + std::copy(data.begin(), data.end(), data_.begin()); + } + + constexpr Vector(const Span data) + { + std::copy(data.begin(), data.end(), data_.begin()); } const T &operator[](size_t i) const diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp index 85ca22082..5567d5b8d 100644 --- a/src/libcamera/vector.cpp +++ b/src/libcamera/vector.cpp @@ -44,6 +44,14 @@ LOG_DEFINE_CATEGORY(Vector) * The size of \a data must be equal to the dimension size Rows of the vector. */ +/** + * \fn Vector::Vector(const Span data) + * \brief Construct vector from supplied data + * \param data Data from which to construct a vector + * + * The size of \a data must be equal to the dimension size Rows of the vector. + */ + /** * \fn T Vector::operator[](size_t i) const * \brief Index to an element in the vector