diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2024-03-19 21:51:30 +0100 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2024-03-19 21:51:30 +0100 |
commit | 3544d9c12fcb66ff8d4dd947137a769eb99f26c2 (patch) | |
tree | e870d52f7189141283840de348b9ded770a6cc4e | |
parent | 9f051299964628452a10b80fff7b372e42b4fa32 (diff) | |
download | cpp-utils-3544d9c12fcb66ff8d4dd947137a769eb99f26c2.tar.gz cpp-utils-3544d9c12fcb66ff8d4dd947137a769eb99f26c2.zip |
ring: add pre cpp17 take() fn
-rw-r--r-- | ring.h | 11 | ||||
-rw-r--r-- | test/ring.cc | 4 |
2 files changed, 11 insertions, 4 deletions
@@ -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 --------------------------------------------------------------- diff --git a/test/ring.cc b/test/ring.cc index a42efaa..657fdfa 100644 --- a/test/ring.cc +++ b/test/ring.cc @@ -56,14 +56,14 @@ int main() { assert(!r.is_empty()); assert(r.is_full()); -#if __cplusplus >= 201703L auto v = r.take(); +#if __cplusplus >= 201703L assert(v.has_value()); +#endif assert(r.size() == 7); assert(!r.is_empty()); assert(!r.is_full()); -#endif assert(m::cnt == 8); } |