[PATCH 1/2] libcamera: utils: Add to_underlying() helper function

Kieran Bingham kieran.bingham at ideasonboard.com
Sun Feb 25 21:00:32 CET 2024


Quoting Laurent Pinchart (2024-02-25 16:43:46)
> C++23 has a std::to_underlying() helper function that converts an
> enumeration value to its underlying type. Add a compatible
> implementation to the libcamera::utils namespace.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  include/libcamera/base/utils.h |  6 ++++++
>  src/libcamera/base/utils.cpp   | 10 ++++++++++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
> index 37d9af609ec7..922e4dfaf9fa 100644
> --- a/include/libcamera/base/utils.h
> +++ b/include/libcamera/base/utils.h
> @@ -369,6 +369,12 @@ decltype(auto) abs_diff(const T &a, const T &b)
>  
>  double strtod(const char *__restrict nptr, char **__restrict endptr);
>  
> +template<class Enum>
> +constexpr std::underlying_type_t<Enum> to_underlying(Enum e) noexcept
> +{
> +       return static_cast<std::underlying_type_t<Enum>>(e);
> +}

Looks good compared to my understanding from:
https://en.cppreference.com/w/cpp/utility/to_underlying

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> +
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
> index 3b73b442260a..2f4c3177ac13 100644
> --- a/src/libcamera/base/utils.cpp
> +++ b/src/libcamera/base/utils.cpp
> @@ -521,6 +521,16 @@ double strtod(const char *__restrict nptr, char **__restrict endptr)
>  #endif
>  }
>  
> +/**
> + * \fn to_underlying(Enum e)
> + * \brief Convert an enumeration to its underlygin type
> + * \param[in] e Enumeration value to convert
> + *
> + * This function is equivalent to the C++23 std::to_underlying().
> + *
> + * \return The value of e converted to its underlying type
> + */
> +
>  } /* namespace utils */
>  
>  #ifndef __DOXYGEN__
> -- 
> Regards,
> 
> Laurent Pinchart
>


More information about the libcamera-devel mailing list