]> git.proxmox.com Git - ceph.git/blame - patches/0019-define-iterators-without-std-iterator.patch
define iterators without std::iterator<>
[ceph.git] / patches / 0019-define-iterators-without-std-iterator.patch
CommitLineData
c9a7474f
TL
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Thomas Lamprecht <t.lamprecht@proxmox.com>
3Date: Wed, 3 May 2023 13:25:08 +0200
4Subject: [PATCH] define iterators without std::iterator<>
5
6> std::iterator<> is deprecated in C++17, so let's just
7> define the required traits directly.
8
9cherry-picked/backported from upstream PRs:
10https://github.com/ceph/ceph/pull/45419/commits
11https://github.com/ceph/ceph/pull/45198/commits
12
13Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
14---
15 .../btree/string_kv_node_layout.h | 27 +++++++++++--------
16 src/include/rados/librados.hpp | 7 ++++-
17 src/include/xlist.h | 15 +++++++++--
18 3 files changed, 35 insertions(+), 14 deletions(-)
19
20diff --git a/src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h b/src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h
21index 9948a4292..1bd95415a 100644
22--- a/src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h
23+++ b/src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h
24@@ -294,7 +294,7 @@ class StringKVInnerNodeLayout {
25 friend class delta_inner_t;
26 public:
27 template <bool is_const>
28- class iter_t : public std::iterator<std::input_iterator_tag, StringKVInnerNodeLayout> {
29+ class iter_t {
30 friend class StringKVInnerNodeLayout;
31
32 template <typename iterator, typename const_iterator>
33@@ -312,17 +312,22 @@ public:
34 uint16_t index) : node(parent), index(index) {}
35
36 public:
37- iter_t(const iter_t &) = default;
38- iter_t(iter_t &&) = default;
39- iter_t &operator=(const iter_t &) = default;
40- iter_t &operator=(iter_t &&) = default;
41-
42- operator iter_t<!is_const>() const {
43- static_assert(!is_const);
44- return iter_t<!is_const>(node, index);
45- }
46-
47+ using iterator_category = std::input_iterator_tag;
48+ using value_type = StringKVInnerNodeLayout;
49+ using difference_type = std::ptrdiff_t;
50+ using pointer = StringKVInnerNodeLayout*;
51 using reference = iter_t&;
52+
53+ iter_t(const iter_t &) = default;
54+ iter_t(iter_t &&) = default;
55+ iter_t &operator=(const iter_t &) = default;
56+ iter_t &operator=(iter_t &&) = default;
57+
58+ operator iter_t<!is_const>() const {
59+ static_assert(!is_const);
60+ return iter_t<!is_const>(node, index);
61+ }
62+
63 iter_t &operator*() { return *this; }
64 iter_t *operator->() { return this; }
65
66diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp
67index b40d7bf9a..712a5da82 100644
68--- a/src/include/rados/librados.hpp
69+++ b/src/include/rados/librados.hpp
70@@ -104,8 +104,13 @@ inline namespace v14_2_0 {
71 };
72 CEPH_RADOS_API std::ostream& operator<<(std::ostream& os, const librados::ObjectCursor& oc);
73
74- class CEPH_RADOS_API NObjectIterator : public std::iterator <std::forward_iterator_tag, ListObject> {
75+ class CEPH_RADOS_API NObjectIterator {
76 public:
77+ using iterator_category = std::forward_iterator_tag;
78+ using value_type = ListObject;
79+ using difference_type = std::ptrdiff_t;
80+ using pointer = ListObject*;
81+ using reference = ListObject&;
82 static const NObjectIterator __EndObjectIterator;
83 NObjectIterator(): impl(NULL) {}
84 ~NObjectIterator();
85diff --git a/src/include/xlist.h b/src/include/xlist.h
86index 733a318a9..73e6d8d53 100644
87--- a/src/include/xlist.h
88+++ b/src/include/xlist.h
89@@ -159,10 +159,15 @@ public:
90 remove(_back);
91 }
92
93- class iterator: std::iterator<std::forward_iterator_tag, T> {
94+ class iterator {
95 private:
96 item *cur;
97 public:
98+ using iterator_category = std::forward_iterator_tag;
99+ using value_type = T;
100+ using difference_type = std::ptrdiff_t;
101+ using pointer = T*;
102+ using reference = T&;
103 iterator(item *i = 0) : cur(i) {}
104 T operator*() { return static_cast<T>(cur->_item); }
105 iterator& operator++() {
106@@ -183,10 +188,16 @@ public:
107 iterator begin() { return iterator(_front); }
108 iterator end() { return iterator(NULL); }
109
110- class const_iterator: std::iterator<std::forward_iterator_tag, T> {
111+ class const_iterator {
112 private:
113 item *cur;
114 public:
115+ using iterator_category = std::forward_iterator_tag;
116+ using value_type = T;
117+ using difference_type = std::ptrdiff_t;
118+ using pointer = const T*;
119+ using reference = const T&;
120+
121 const_iterator(item *i = 0) : cur(i) {}
122 const T operator*() { return static_cast<const T>(cur->_item); }
123 const_iterator& operator++() {