[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