summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-07-13 20:25:21 +0900
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-07-13 21:27:47 +0900
commitc4b9ccb45a9f9a47e252d1ce4b5d55211a22a389 (patch)
treef372342a2b6fb809fe912d32786f6fde3d908773 /src
parent1a7f1610e9f823011de4393af8ec9c10aa6b2097 (diff)
libcamera: utils: Add clamp()
C++11 does not support std::clamp(), add a custom implementation in utils. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/include/utils.h8
-rw-r--r--src/libcamera/utils.cpp8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
index 97bd470a..47a42258 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,13 @@ unsigned int set_overlap(InputIt1 first1, InputIt1 last1,
return count;
}
+/* C++11 doesn't provide std::clamp */
+template <typename T>
+const 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 ef365366..afbdd834 100644
--- a/src/libcamera/utils.cpp
+++ b/src/libcamera/utils.cpp
@@ -85,6 +85,14 @@ 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 */