|
32 | 32 | #include <leveldb/write_batch.h>
|
33 | 33 | #include <memory>
|
34 | 34 | #include <optional>
|
| 35 | +#include <utility> |
35 | 36 |
|
36 | 37 | bool DestroyDB(const std::string& path_str)
|
37 | 38 | {
|
@@ -306,26 +307,39 @@ bool CDBWrapper::IsEmpty()
|
306 | 307 | return !(it->Valid());
|
307 | 308 | }
|
308 | 309 |
|
| 310 | +struct CDBIterator::IteratorImpl { |
| 311 | + const std::unique_ptr<leveldb::Iterator> iter; |
| 312 | + |
| 313 | + explicit IteratorImpl(leveldb::Iterator* _iter) : iter{_iter} {} |
| 314 | +}; |
| 315 | + |
| 316 | +CDBIterator::CDBIterator(const CDBWrapper& _parent, std::unique_ptr<IteratorImpl> _piter) : parent(_parent), m_impl_iter(std::move(_piter)) {} |
| 317 | + |
| 318 | +CDBIterator* CDBWrapper::NewIterator() |
| 319 | +{ |
| 320 | + return new CDBIterator{*this, std::make_unique<CDBIterator::IteratorImpl>(pdb->NewIterator(iteroptions))}; |
| 321 | +} |
| 322 | + |
309 | 323 | void CDBIterator::SeekImpl(Span<const std::byte> ssKey)
|
310 | 324 | {
|
311 | 325 | leveldb::Slice slKey(CharCast(ssKey.data()), ssKey.size());
|
312 |
| - piter->Seek(slKey); |
| 326 | + m_impl_iter->iter->Seek(slKey); |
313 | 327 | }
|
314 | 328 |
|
315 | 329 | Span<const std::byte> CDBIterator::GetKeyImpl() const
|
316 | 330 | {
|
317 |
| - return MakeByteSpan(piter->key()); |
| 331 | + return MakeByteSpan(m_impl_iter->iter->key()); |
318 | 332 | }
|
319 | 333 |
|
320 | 334 | Span<const std::byte> CDBIterator::GetValueImpl() const
|
321 | 335 | {
|
322 |
| - return MakeByteSpan(piter->value()); |
| 336 | + return MakeByteSpan(m_impl_iter->iter->value()); |
323 | 337 | }
|
324 | 338 |
|
325 |
| -CDBIterator::~CDBIterator() { delete piter; } |
326 |
| -bool CDBIterator::Valid() const { return piter->Valid(); } |
327 |
| -void CDBIterator::SeekToFirst() { piter->SeekToFirst(); } |
328 |
| -void CDBIterator::Next() { piter->Next(); } |
| 339 | +CDBIterator::~CDBIterator() = default; |
| 340 | +bool CDBIterator::Valid() const { return m_impl_iter->iter->Valid(); } |
| 341 | +void CDBIterator::SeekToFirst() { m_impl_iter->iter->SeekToFirst(); } |
| 342 | +void CDBIterator::Next() { m_impl_iter->iter->Next(); } |
329 | 343 |
|
330 | 344 | namespace dbwrapper_private {
|
331 | 345 |
|
|
0 commit comments