From eaa1297df0bc4c6620ccde171dc9dc088109e35e Mon Sep 17 00:00:00 2001
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Fri, 14 Feb 2020 17:02:18 +0200
Subject: libcamera: controls: Move ControlValue get() and set() to controls.h

To avoid defining all specializations of ControlValue::get() and
ControlValue::set() manually, move the definition of those functions to
controls.h and turn them into single template functions.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 include/libcamera/controls.h | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

(limited to 'include')

diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 429f01b0..39e24043 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -8,6 +8,7 @@
 #ifndef __LIBCAMERA_CONTROLS_H__
 #define __LIBCAMERA_CONTROLS_H__
 
+#include <assert.h>
 #include <string>
 #include <unordered_map>
 
@@ -70,9 +71,19 @@ public:
 	}
 
 	template<typename T>
-	T get() const;
+	T get() const
+	{
+		assert(type_ == details::control_type<std::remove_cv_t<T>>::value);
+
+		return *reinterpret_cast<const T *>(&bool_);
+	}
+
 	template<typename T>
-	void set(const T &value);
+	void set(const T &value)
+	{
+		type_ = details::control_type<std::remove_cv_t<T>>::value;
+		*reinterpret_cast<T *>(&bool_) = value;
+	}
 
 private:
 	ControlType type_;
-- 
cgit v1.2.1