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 } } }
// Valid returns false only when an Iterator has iterated past either the // first or the last key in the database. func (it *Iterator) Valid() bool { return ucharToBool(C.leveldb_iter_valid(it.Iter)) }