aboutsummaryrefslogtreecommitdiff
path: root/ring.h
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2024-03-19 21:51:30 +0100
committerJohannes Stoelp <johannes.stoelp@gmail.com>2024-03-19 21:51:30 +0100
commit3544d9c12fcb66ff8d4dd947137a769eb99f26c2 (patch)
treee870d52f7189141283840de348b9ded770a6cc4e /ring.h
parent9f051299964628452a10b80fff7b372e42b4fa32 (diff)
downloadcpp-utils-3544d9c12fcb66ff8d4dd947137a769eb99f26c2.tar.gz
cpp-utils-3544d9c12fcb66ff8d4dd947137a769eb99f26c2.zip
ring: add pre cpp17 take() fn
Diffstat (limited to 'ring.h')
-rw-r--r--ring.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/ring.h b/ring.h
index 3658ec4..43c3fca 100644
--- a/ring.h
+++ b/ring.h
@@ -99,12 +99,19 @@ class ring {
#if __cplusplus >= 201703L
constexpr std::optional<T> take() {
if (!is_empty()) {
- const std::optional<T> kRet = std::move(vals[m_rc & kMASK]);
+ std::optional<T> ret = std::move(vals[m_rc & kMASK]);
pop();
- return kRet;
+ return ret;
}
return std::nullopt;
}
+#else
+ constexpr T take() {
+ assert(!is_empty());
+ T ret = std::move(vals[m_rc & kMASK]);
+ pop();
+ return ret;
+ }
#endif
// -- INTERNAL ---------------------------------------------------------------