[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