func (db *DB) NewIterator() driver.IIterator { it := new(Iterator) it.it = C.leveldb_create_iterator(db.db, db.iteratorOpts.Opt) return it }
func (s *Snapshot) NewIterator() *Iterator { it := new(Iterator) it.it = C.leveldb_create_iterator(s.db.db, s.iteratorOpts.Opt) return it }
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 } } }
// NewIterator returns an Iterator over the the database that uses the // ReadOptions given. // // Often, this is used for large, offline bulk reads while serving live // traffic. In that case, it may be wise to disable caching so that the data // processed by the returned Iterator does not displace the already cached // data. This can be done by calling SetFillCache(false) on the ReadOptions // before passing it here. // // Similiarly, ReadOptions.SetSnapshot is also useful. func (db *DB) NewIterator(ro *ReadOptions) *Iterator { it := C.leveldb_create_iterator(db.Ldb, ro.Opt) return &Iterator{Iter: it} }