package com.protonail.leveldb.jna; import com.sun.jna.Native; import com.sun.jna.ptr.PointerByReference; public class LevelDBKeyIterator extends LevelDBIteratorBase<byte[]> { public LevelDBKeyIterator(LevelDB levelDB, LevelDBReadOptions readOptions) { super(levelDB, readOptions); LevelDBNative.leveldb_iter_seek_to_first(iterator); } public byte[] next() { levelDB.checkDatabaseOpen(); checkIteratorOpen(); PointerByReference resultLengthPointer = new PointerByReference(); PointerByReference resultPointer = LevelDBNative.leveldb_iter_key(iterator, resultLengthPointer); long resultLength; if (Native.POINTER_SIZE == 8) { resultLength = resultLengthPointer.getPointer().getLong(0); } else { resultLength = resultLengthPointer.getPointer().getInt(0); } byte[] key = resultPointer.getPointer().getByteArray(0, (int) resultLength); LevelDBNative.leveldb_iter_next(iterator); return key; } }