40 lines
		
	
	
		
			765 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			765 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build leveldb
 | |
| 
 | |
| package leveldb
 | |
| 
 | |
| // #cgo LDFLAGS: -lleveldb
 | |
| // #include "leveldb/c.h"
 | |
| import "C"
 | |
| 
 | |
| import (
 | |
| 	"github.com/siddontang/ledisdb/store/driver"
 | |
| )
 | |
| 
 | |
| type Snapshot struct {
 | |
| 	db           *DB
 | |
| 	snap         *C.leveldb_snapshot_t
 | |
| 	readOpts     *ReadOptions
 | |
| 	iteratorOpts *ReadOptions
 | |
| }
 | |
| 
 | |
| func (s *Snapshot) Get(key []byte) ([]byte, error) {
 | |
| 	return s.db.get(s.readOpts, key)
 | |
| }
 | |
| 
 | |
| func (s *Snapshot) GetSlice(key []byte) (driver.ISlice, error) {
 | |
| 	return s.db.getSlice(s.readOpts, key)
 | |
| }
 | |
| 
 | |
| func (s *Snapshot) NewIterator() driver.IIterator {
 | |
| 	it := new(Iterator)
 | |
| 	it.it = C.leveldb_create_iterator(s.db.db, s.db.iteratorOpts.Opt)
 | |
| 	return it
 | |
| 
 | |
| }
 | |
| 
 | |
| func (s *Snapshot) Close() {
 | |
| 	C.leveldb_release_snapshot(s.db.db, s.snap)
 | |
| 	s.iteratorOpts.Close()
 | |
| 	s.readOpts.Close()
 | |
| }
 |