[libcamera-devel] [PATCH 1/3] libcamera: utils: Add exchange()
Niklas Söderlund
niklas.soderlund at ragnatech.se
Mon Dec 16 13:10:27 CET 2019
C++11 does not support std::exchange(), add a custom implementation in
utils.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
src/libcamera/include/utils.h | 9 +++++++++
src/libcamera/utils.cpp | 7 +++++++
2 files changed, 16 insertions(+)
diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
index a80f7d096bf725a1..32e3b009040d9efc 100644
--- a/src/libcamera/include/utils.h
+++ b/src/libcamera/include/utils.h
@@ -66,6 +66,15 @@ const T& clamp(const T& v, const T& lo, const T& hi)
return std::max(lo, std::min(v, hi));
}
+/* C++11 doesn't provide std::exchange */
+template<class T, class U = T>
+T exchange(T &obj, U &&new_value)
+{
+ T old_value = std::move(obj);
+ obj = std::forward<U>(new_value);
+ return old_value;
+}
+
using clock = std::chrono::steady_clock;
using duration = std::chrono::steady_clock::duration;
using time_point = std::chrono::steady_clock::time_point;
diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
index d632f6e66638038d..0e2decd966dd8d0c 100644
--- a/src/libcamera/utils.cpp
+++ b/src/libcamera/utils.cpp
@@ -95,6 +95,13 @@ char *secure_getenv(const char *name)
* \return lo if v is less than lo, hi if v is greater than hi, otherwise v
*/
+/**
+ * \fn libcamera::utils::exchange(T &obj, U &&new_value)
+ * \param[in] obj object whose value to replace
+ * \param[in] new_value the value to assign to obj
+ * \return The old value of obj
+ */
+
/**
* \typedef clock
* \brief The libcamera clock (monotonic)
--
2.24.0
More information about the libcamera-devel
mailing list