libcamera: controls: Move ControlValue constructor to controls.h

To avoid defining all specializations of the ControlValue constructor
manually, move the definition of those functions to controls.h and turn
them into a single template function. The default constructor is still
kept in controls.cpp.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2020-02-14 17:02:18 +02:00
parent eaa1297df0
commit b2710e8c36
2 changed files with 10 additions and 27 deletions
+7 -3
View File
@@ -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;
}
ControlType type() const { return type_; }
bool isNone() const { return type_ == ControlTypeNone; }
+3 -24
View File
@@ -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()