[libcamera-devel] [PATCH v3 03/33] libcamera: utils: Add exchange()
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Jan 11 00:04:57 CET 2020
Hi Niklas,
Thank you for the patch.
On Fri, Jan 10, 2020 at 08:37:38PM +0100, Niklas Söderlund wrote:
> C++11 does not support std::exchange(), add a custom implementation in
> utils.
This is now only used by the FrameBuffer move constructor, which I think
should be dropped (I'll comment on that in the corresponding patch), so
this patch could possibly be dropped too.
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/include/utils.h | 9 +++++++++
> src/libcamera/utils.cpp | 8 ++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
> index badc77533fa15f09..6470cadc2c6c1234 100644
> --- a/src/libcamera/include/utils.h
> +++ b/src/libcamera/include/utils.h
> @@ -67,6 +67,15 @@ const T& clamp(const T& v, const T& lo, const T& hi)
> return std::max(lo, std::min(v, hi));
> }
>
> +/* C++11 doesn't provide std::exchange */
> +template<class T, class U = T>
> +T exchange(T &obj, U &&new_value)
> +{
> + T old_value = std::move(obj);
> + obj = std::forward<U>(new_value);
> + return old_value;
> +}
> +
> using clock = std::chrono::steady_clock;
> using duration = std::chrono::steady_clock::duration;
> using time_point = std::chrono::steady_clock::time_point;
> diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
> index 5de9e4813353b23c..a7e573ac45aec914 100644
> --- a/src/libcamera/utils.cpp
> +++ b/src/libcamera/utils.cpp
> @@ -95,6 +95,14 @@ char *secure_getenv(const char *name)
> * \return lo if v is less than lo, hi if v is greater than hi, otherwise v
> */
>
> +/**
> + * \fn libcamera::utils::exchange(T &obj, U &&new_value)
> + * \brief Replace the value of \a obj with \a new_value and return the old value
> + * \param[inout] obj Object whose value to replace
> + * \param[in] new_value The value to assign to obj
> + * \return The old value of \a obj
> + */
> +
> /**
> * \typedef clock
> * \brief The libcamera clock (monotonic)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list