| 306 | inline std::vector<PageRange> getPageRanges() const { return diskArray.getPageRanges(); } |
| 307 | |
| 308 | class WriteIterator { |
| 309 | public: |
| 310 | explicit WriteIterator(DiskArrayInternal::WriteIterator&& iter) : iter(std::move(iter)) {} |
| 311 | inline U& operator*() { return *reinterpret_cast<U*>((*iter).data()); } |
| 312 | DELETE_COPY_DEFAULT_MOVE(WriteIterator); |
| 313 | |
| 314 | inline WriteIterator& operator+=(size_t dist) { |
| 315 | iter += dist; |
| 316 | return *this; |
| 317 | } |
| 318 | |
| 319 | inline WriteIterator& seek(size_t idx) { |
| 320 | iter.seek(idx); |
| 321 | return *this; |
| 322 | } |
| 323 | |
| 324 | inline uint64_t idx() const { return iter.idx; } |
| 325 | inline uint64_t getAPIdx() const { return iter.apCursor.pageIdx; } |
| 326 | |
| 327 | inline WriteIterator& pushBack(PageAllocator& pageAllocator, |
| 328 | const transaction::Transaction* transaction, U val) { |
| 329 | iter.pushBack(pageAllocator, transaction, getSpan(val)); |
| 330 | return *this; |
| 331 | } |
| 332 | |
| 333 | inline uint64_t size() const { return iter.size(); } |
| 334 | |
| 335 | private: |
| 336 | DiskArrayInternal::WriteIterator iter; |
| 337 | }; |
| 338 | |
| 339 | inline WriteIterator iter_mut() { return WriteIterator{diskArray.iter_mut(sizeof(U))}; } |
| 340 | inline uint64_t getAPIdx(uint64_t idx) const { return diskArray.getAPIdx(idx); } |