[PATCH v3 01/17] ipa: libipa: vector: Add mutable x(), y() and z() accessors

Barnabás Pőcze pobrn at protonmail.com
Tue Nov 19 04:28:25 CET 2024


Hi


2024. november 18., hétfő 23:16 keltezéssel, Laurent Pinchart <laurent.pinchart at ideasonboard.com> írta:

> The x(), y() and z() functions of the Vector class are convenience
> accessors for the first, second and third element of the vector
> respectively, meant to improve readability of class users when a vector
> represents coordinates in 1D, 2D or 3D space. Those accessors are
> limited to immutable access to the vector elements, as they return a
> copy. Extend the API with mutable accessors.
> 
> The immutable accessors are modified to return a reference to the vector
> elements instead of a copy for consistency. As they are inline
> functions, this should make no difference in terms of performance as the
> compiler can perform the same optimizations in their case.
> 
> While at it, reorder functions to declare operators before other member
> functions, to be consistent with the usual coding style.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Reviewed-by: Milan Zamazal <mzamazal at redhat.com>
> ---
>  src/ipa/libipa/vector.cpp | 51 +++++++++++++++++++++++++--------------
>  src/ipa/libipa/vector.h   | 49 +++++++++++++++++++------------------
>  2 files changed, 58 insertions(+), 42 deletions(-)
> 
> diff --git a/src/ipa/libipa/vector.cpp b/src/ipa/libipa/vector.cpp
> index bd00b01961d5..8a39bfd27f90 100644
> --- a/src/ipa/libipa/vector.cpp
> +++ b/src/ipa/libipa/vector.cpp
> @@ -52,24 +52,6 @@ namespace ipa {
>   * \copydoc Vector::operator[](size_t i) const
>   */
> 
> -/**
> - * \fn Vector::x()
> - * \brief Convenience function to access the first element of the vector
> - * \return The first element of the vector
> - */
> -
> -/**
> - * \fn Vector::y()
> - * \brief Convenience function to access the second element of the vector
> - * \return The second element of the vector
> - */
> -
> -/**
> - * \fn Vector::z()
> - * \brief Convenience function to access the third element of the vector
> - * \return The third element of the vector
> - */
> -
>  /**
>   * \fn Vector::operator-() const
>   * \brief Negate a Vector by negating both all of its coordinates
> @@ -111,6 +93,39 @@ namespace ipa {
>   * \return The vector divided by \a factor
>   */
> 
> +/**
> + * \fn T &Vector::x()
> + * \brief Convenience function to access the first element of the vector
> + * \return The first element of the vector
> + */
> +
> +/**
> + * \fn T &Vector::y()
> + * \brief Convenience function to access the second element of the vector
> + * \return The second element of the vector
> + */
> +
> +/**
> + * \fn T &Vector::z()
> + * \brief Convenience function to access the third element of the vector
> + * \return The third element of the vector
> + */
> +
> +/**
> + * \fn constexpr const T &Vector::x() const
> + * \copydoc Vector::x()
> + */
> +
> +/**
> + * \fn constexpr const T &Vector::y() const
> + * \copydoc Vector::y()
> + */
> +
> +/**
> + * \fn constexpr const T &Vector::z() const
> + * \copydoc Vector::z()
> + */
> +
>  /**
>   * \fn Vector::length2()
>   * \brief Get the squared length of the vector
> diff --git a/src/ipa/libipa/vector.h b/src/ipa/libipa/vector.h
> index 8612a06a2ab2..1b11a34deee4 100644
> --- a/src/ipa/libipa/vector.h
> +++ b/src/ipa/libipa/vector.h
> @@ -53,30 +53,6 @@ public:
>  		return data_[i];
>  	}
> 
> -#ifndef __DOXYGEN__
> -	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> -#endif /* __DOXYGEN__ */
> -	constexpr T x() const
> -	{
> -		return data_[0];
> -	}
> -
> -#ifndef __DOXYGEN__
> -	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> -#endif /* __DOXYGEN__ */
> -	constexpr T y() const
> -	{
> -		return data_[1];
> -	}
> -
> -#ifndef __DOXYGEN__
> -	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> -#endif /* __DOXYGEN__ */
> -	constexpr T z() const
> -	{
> -		return data_[2];
> -	}
> -
>  	constexpr Vector<T, Rows> operator-() const
>  	{
>  		Vector<T, Rows> ret;
> @@ -125,6 +101,31 @@ public:
>  		return ret;
>  	}
> 
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> +#endif /* __DOXYGEN__ */
> +	constexpr const T &x() const { return data_[0]; }
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> +#endif /* __DOXYGEN__ */
> +	constexpr const T &y() const { return data_[1]; }
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> +#endif /* __DOXYGEN__ */
> +	constexpr const T &z() const { return data_[2]; }
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> +#endif /* __DOXYGEN__ */
> +	T &x() { return data_[0]; }
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> +#endif /* __DOXYGEN__ */
> +	T &y() { return data_[1]; }
> +#ifndef __DOXYGEN__
> +	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> +#endif /* __DOXYGEN__ */
> +	T &z() { return data_[2]; }

I see no reason not to make the non-const qualified versions `constexpr` as well.
Same with r(), g(), b() in the next patch.


Regards,
Barnabás Pőcze

> +
>  	constexpr double length2() const
>  	{
>  		double ret = 0;
> --
> Regards,
> 
> Laurent Pinchart


More information about the libcamera-devel mailing list