[libcamera-devel] [PATCH 1/3] libcamera: utils: Add exchange()

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Dec 16 13:18:21 CET 2019


Hi Niklas,

Thank you for the patch.

On Mon, Dec 16, 2019 at 01:10:27PM +0100, Niklas Söderlund wrote:
> C++11 does not support std::exchange(), add a custom implementation in
> utils.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/include/utils.h | 9 +++++++++
>  src/libcamera/utils.cpp       | 7 +++++++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
> index a80f7d096bf725a1..32e3b009040d9efc 100644
> --- a/src/libcamera/include/utils.h
> +++ b/src/libcamera/include/utils.h
> @@ -66,6 +66,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 d632f6e66638038d..0e2decd966dd8d0c 100644
> --- a/src/libcamera/utils.cpp
> +++ b/src/libcamera/utils.cpp
> @@ -95,6 +95,13 @@ 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)

It would b e nice to also explain what the function does ;-)

 * \brief Replace the value of \a obj with \a new_value and return the old value

> + * \param[in] obj object whose value to replace

Isn't this a param[inout] ?

s/object/Object/

> + * \param[in] new_value the value to assign to obj

s/the/The/

> + * \return The old value of obj

s/obj/\\a obj/

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> + */
> +
>  /**
>   * \typedef clock
>   * \brief The libcamera clock (monotonic)

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list