@@ -118,9 +118,7 @@ inline namespace memory
118
118
119
119
using difference_type = std::ptrdiff_t ;
120
120
121
- page const * pages;
122
-
123
- std::size_t page_size;
121
+ std::vector<page> const & pages;
124
122
125
123
std::size_t page_index;
126
124
@@ -129,8 +127,7 @@ inline namespace memory
129
127
explicit iterator (std::vector<page> const & pages,
130
128
std::size_t page_index_hint,
131
129
std::size_t word_index_hint) noexcept
132
- : pages { pages.data () }
133
- , page_size { pages.size () }
130
+ : pages { pages }
134
131
, page_index { page_index_hint }
135
132
, word_index { word_index_hint }
136
133
{
@@ -141,16 +138,14 @@ inline namespace memory
141
138
}
142
139
143
140
explicit iterator (std::vector<page> const & pages) noexcept
144
- : pages { pages.data () }
145
- , page_size { pages.size () }
146
- , page_index { page_size }
141
+ : pages { pages }
142
+ , page_index { pages.size () }
147
143
, word_index { word_size }
148
144
{}
149
145
150
146
explicit operator bool () const noexcept
151
147
{
152
- return page_index < page_size and
153
- word_index < word_size and pages[page_index][word_index];
148
+ return page_index < pages.size () and word_index < word_size and pages[page_index][word_index];
154
149
}
155
150
156
151
auto operator *() const noexcept
@@ -162,7 +157,7 @@ inline namespace memory
162
157
{
163
158
++word_index;
164
159
165
- for (; page_index < page_size ; ++page_index)
160
+ for (; page_index < pages. size () ; ++page_index)
166
161
{
167
162
for (auto && word = pages[page_index]; word_index < word_size; ++word_index)
168
163
{
@@ -175,7 +170,8 @@ inline namespace memory
175
170
word_index = 0 ;
176
171
}
177
172
178
- page_index = page_size;
173
+ page_index = pages.size ();
174
+
179
175
word_index = word_size;
180
176
181
177
return *this ; // end
@@ -190,8 +186,9 @@ inline namespace memory
190
186
191
187
auto operator --() noexcept -> auto &
192
188
{
193
- page_index = page_size <= page_index ? page_size - 1 : page_index;
194
- word_index = word_size <= word_index ? word_size - 1 : word_index - 1 ;
189
+ page_index = std::min (pages.size () - 1 , page_index);
190
+
191
+ word_index = std::min (word_size - 1 , word_index - 1 );
195
192
196
193
/*
197
194
NOTE: N4659 6.9.1.4
@@ -200,7 +197,7 @@ inline namespace memory
200
197
n is the number of bits in the value representation of that
201
198
particular size of integer.
202
199
*/
203
- for (; page_index < page_size ; --page_index)
200
+ for (; page_index < pages. size () ; --page_index)
204
201
{
205
202
for (auto && word = pages[page_index]; word_index < word_size; --word_index)
206
203
{
0 commit comments