[libcamera-devel] [PATCH] libcamera: utils: Add clamp()

Niklas Söderlund niklas.soderlund at ragnatech.se
Sat Jul 13 13:39:46 CEST 2019


C++11 does not support std::clamp(), add a custom implementation in
utils.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
 src/libcamera/include/utils.h | 7 +++++++
 src/libcamera/utils.cpp       | 9 +++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
index 97bd470a45b050ef..beb2ce3ff7da9352 100644
--- a/src/libcamera/include/utils.h
+++ b/src/libcamera/include/utils.h
@@ -7,6 +7,7 @@
 #ifndef __LIBCAMERA_UTILS_H__
 #define __LIBCAMERA_UTILS_H__
 
+#include <algorithm>
 #include <memory>
 
 #define ARRAY_SIZE(a)	(sizeof(a) / sizeof(a[0]))
@@ -45,6 +46,12 @@ unsigned int set_overlap(InputIt1 first1, InputIt1 last1,
 	return count;
 }
 
+/* C++11 doesn't provide std::clamp */
+template <typename T>
+T clamp(const T& v, const T& lo, const T& hi) {
+	return std::max(lo, std::min(v, hi));
+}
+
 } /* namespace utils */
 
 } /* namespace libcamera */
diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
index ef365366f29b426e..b0ca3565ee5a0d83 100644
--- a/src/libcamera/utils.cpp
+++ b/src/libcamera/utils.cpp
@@ -85,6 +85,15 @@ char *secure_getenv(const char *name)
  * \return The number of elements in the intersection of the two ranges
  */
 
+/**
+ * \fn libcamera::utils::clamp(const T& v, const T& lo, const T& hi)
+ * \param[in] v The value to clamp
+ * \param[in] lo The lower boundary to clamp v to
+ * \param[in] hi The higher boundary to clamp v to
+ *
+ * \return lo if v is less than lo, hi if v is greater than hi, otherwise v
+ */
+
 } /* namespace utils */
 
 } /* namespace libcamera */
-- 
2.22.0



More information about the libcamera-devel mailing list