[libcamera-devel] [PATCH 13/31] libcamera: controls: Move ControlValue constructor to controls.h
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Mar 3 00:28:17 CET 2020
Hi Laurent,
On 29/02/2020 16:42, Laurent Pinchart wrote:
> To avoid defining all specializations of the ControlValue constructor
> manually, move the definition of those functions to controls.h. The
> default constructor is still kept in controls.cpp.
>
Nice :-)
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> include/libcamera/controls.h | 10 +++++++---
> src/libcamera/controls.cpp | 27 +++------------------------
> 2 files changed, 10 insertions(+), 27 deletions(-)
>
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 39e240438861..dfe69916cd64 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -55,9 +55,13 @@ class ControlValue
> {
> public:
> ControlValue();
> - ControlValue(bool value);
> - ControlValue(int32_t value);
> - ControlValue(int64_t value);
> +
> + template<typename T>
> + ControlValue(T value)
> + : type_(details::control_type<std::remove_cv_t<T>>::value)
> + {
> + *reinterpret_cast<T *>(&bool_) = value;
That's horrible to read but it makes sense :-)
(except for that pesky bool_ of course)
> + }
>
> ControlType type() const { return type_; }
> bool isNone() const { return type_ == ControlTypeNone; }
> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> index f3d79785e6a8..5cc8ce2199d0 100644
> --- a/src/libcamera/controls.cpp
> +++ b/src/libcamera/controls.cpp
> @@ -74,31 +74,10 @@ ControlValue::ControlValue()
> }
>
> /**
> - * \brief Construct a Boolean ControlValue
> - * \param[in] value Boolean value to store
> + * \fn template<typename T> T ControlValue::ControlValue(T value)
> + * \brief Construct a ControlValue of type T
> + * \param[in] value Initial value
> */
> -ControlValue::ControlValue(bool value)
> - : type_(ControlTypeBool), bool_(value)
> -{
> -}
> -
> -/**
> - * \brief Construct an integer ControlValue
> - * \param[in] value Integer value to store
> - */
> -ControlValue::ControlValue(int32_t value)
> - : type_(ControlTypeInteger32), integer32_(value)
> -{
> -}
> -
> -/**
> - * \brief Construct a 64 bit integer ControlValue
> - * \param[in] value Integer value to store
> - */
> -ControlValue::ControlValue(int64_t value)
> - : type_(ControlTypeInteger64), integer64_(value)
> -{
> -}
>
> /**
> * \fn ControlValue::type()
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list