summaryrefslogtreecommitdiff
path: root/src/libcamera/controls.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/controls.cpp')
-rw-r--r--src/libcamera/controls.cpp87
1 files changed, 39 insertions, 48 deletions
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 9960a30d..88aab88d 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -90,77 +90,68 @@ ControlValue::ControlValue(int64_t value)
*/
/**
- * \brief Set the value with a boolean
- * \param[in] value Boolean value to store
+ * \fn template<typename T> const T &ControlValue::get() const
+ * \brief Get the control value
+ *
+ * The control value type shall match the type T, otherwise the behaviour is
+ * undefined.
+ *
+ * \return The control value
*/
-void ControlValue::set(bool value)
-{
- type_ = ControlTypeBool;
- bool_ = value;
-}
/**
- * \brief Set the value with an integer
- * \param[in] value Integer value to store
+ * \fn template<typename T> void ControlValue::set(const T &value)
+ * \brief Set the control value to \a value
+ * \param[in] value The control value
*/
-void ControlValue::set(int value)
-{
- type_ = ControlTypeInteger;
- integer_ = value;
-}
-/**
- * \brief Set the value with a 64 bit integer
- * \param[in] value 64 bit integer value to store
- */
-void ControlValue::set(int64_t value)
-{
- type_ = ControlTypeInteger64;
- integer64_ = value;
-}
-
-/**
- * \brief Get the boolean value
- *
- * The value type must be Boolean.
- *
- * \return The boolean value
- */
-bool ControlValue::getBool() const
+#ifndef __DOXYGEN__
+template<>
+const bool &ControlValue::get<bool>() const
{
ASSERT(type_ == ControlTypeBool);
return bool_;
}
-/**
- * \brief Get the integer value
- *
- * The value type must be Integer or Integer64.
- *
- * \return The integer value
- */
-int ControlValue::getInt() const
+template<>
+const int &ControlValue::get<int>() const
{
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
return integer_;
}
-/**
- * \brief Get the 64-bit integer value
- *
- * The value type must be Integer or Integer64.
- *
- * \return The 64-bit integer value
- */
-int64_t ControlValue::getInt64() const
+template<>
+const int64_t &ControlValue::get<int64_t>() const
{
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
return integer64_;
}
+template<>
+void ControlValue::set<bool>(const bool &value)
+{
+ type_ = ControlTypeBool;
+ bool_ = value;
+}
+
+template<>
+void ControlValue::set<int>(const int &value)
+{
+ type_ = ControlTypeInteger;
+ integer_ = value;
+}
+
+template<>
+void ControlValue::set<int64_t>(const int64_t &value)
+{
+ type_ = ControlTypeInteger64;
+ integer64_ = value;
+}
+#endif /* __DOXYGEN__ */
+
/**
* \brief Assemble and return a string describing the value
* \return A string describing the ControlValue