func (self *Leveldb) Iter(fun func(string, Getter) bool) { iterator := C.leveldb_create_iterator(self.cdb, self.read_options) defer C.leveldb_iter_destroy(iterator) var keyLen C.size_t var keyValue *C.char var valueLen C.size_t var valueValue *C.char var ret bool for C.leveldb_iter_seek_to_first(iterator); C.leveldb_iter_valid(iterator) != levelFalse; C.leveldb_iter_next(iterator) { keyValue = C.leveldb_iter_key(iterator, &keyLen) key := string(C.GoBytes(unsafe.Pointer(keyValue), C.int(keyLen))) valueValue = C.leveldb_iter_value(iterator, &valueLen) value := C.GoBytes(unsafe.Pointer(valueValue), C.int(valueLen)) r := bytes.NewReader(value) ret = fun(key, func(e interface{}) error { return decode(r, e) }) if ret == false { break } } }
// SeekToFirst moves the iterator to the first key in the database, as defined // by the Comparator in the ReadOptions used to create this Iterator. // // This method is safe to call when Valid returns false. func (it *Iterator) SeekToFirst() { C.leveldb_iter_seek_to_first(it.Iter) }