diff options
Diffstat (limited to 'src/librados/librados.cc')
-rw-r--r-- | src/librados/librados.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/librados/librados.cc b/src/librados/librados.cc index a916abcff26..f4a2a0c2786 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -488,6 +488,13 @@ librados::ObjectIterator librados::ObjectIterator::operator++(int) return ret; } +uint32_t librados::ObjectIterator::seek(uint32_t pos) +{ + uint32_t r = rados_objects_list_seek(ctx.get(), pos); + get_next(); + return r; +} + void librados::ObjectIterator::get_next() { const char *entry, *key; @@ -1136,6 +1143,16 @@ librados::ObjectIterator librados::IoCtx::objects_begin() return iter; } +librados::ObjectIterator librados::IoCtx::objects_begin(uint32_t pos) +{ + rados_list_ctx_t listh; + rados_objects_list_open(io_ctx_impl, &listh); + ObjectIterator iter((ObjListCtx*)listh); + iter.seek(pos); + iter.get_next(); + return iter; +} + const librados::ObjectIterator& librados::IoCtx::objects_end() const { return ObjectIterator::__EndObjectIterator; @@ -2534,6 +2551,14 @@ extern "C" void rados_objects_list_close(rados_list_ctx_t h) delete lh; } +extern "C" uint32_t rados_objects_list_seek(rados_list_ctx_t listctx, + uint32_t pos) +{ + librados::ObjListCtx *lh = (librados::ObjListCtx *)listctx; + uint32_t r = lh->ctx->list_seek(lh->lc, pos); + return r; +} + extern "C" uint32_t rados_objects_list_get_pg_hash_position( rados_list_ctx_t listctx) { |