1// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
2// All rights reserved.
3//
4// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6
7// Package leveldb provides implementation of LevelDB key/value database.
8//
9// Create or open a database:
10//
11//	// The returned DB instance is safe for concurrent use. Which mean that all
12//	// DB's methods may be called concurrently from multiple goroutine.
13//	db, err := leveldb.OpenFile("path/to/db", nil)
14//	...
15//	defer db.Close()
16//	...
17//
18// Read or modify the database content:
19//
20//	// Remember that the contents of the returned slice should not be modified.
21//	data, err := db.Get([]byte("key"), nil)
22//	...
23//	err = db.Put([]byte("key"), []byte("value"), nil)
24//	...
25//	err = db.Delete([]byte("key"), nil)
26//	...
27//
28// Iterate over database content:
29//
30//	iter := db.NewIterator(nil, nil)
31//	for iter.Next() {
32//		// Remember that the contents of the returned slice should not be modified, and
33//		// only valid until the next call to Next.
34//		key := iter.Key()
35//		value := iter.Value()
36//		...
37//	}
38//	iter.Release()
39//	err = iter.Error()
40//	...
41//
42// Iterate over subset of database content with a particular prefix:
43//	iter := db.NewIterator(util.BytesPrefix([]byte("foo-")), nil)
44//	for iter.Next() {
45//		// Use key/value.
46//		...
47//	}
48//	iter.Release()
49//	err = iter.Error()
50//	...
51//
52// Seek-then-Iterate:
53//
54// 	iter := db.NewIterator(nil, nil)
55// 	for ok := iter.Seek(key); ok; ok = iter.Next() {
56// 		// Use key/value.
57// 		...
58// 	}
59// 	iter.Release()
60// 	err = iter.Error()
61// 	...
62//
63// Iterate over subset of database content:
64//
65// 	iter := db.NewIterator(&util.Range{Start: []byte("foo"), Limit: []byte("xoo")}, nil)
66// 	for iter.Next() {
67// 		// Use key/value.
68// 		...
69// 	}
70// 	iter.Release()
71// 	err = iter.Error()
72// 	...
73//
74// Batch writes:
75//
76//	batch := new(leveldb.Batch)
77//	batch.Put([]byte("foo"), []byte("value"))
78//	batch.Put([]byte("bar"), []byte("another value"))
79//	batch.Delete([]byte("baz"))
80//	err = db.Write(batch, nil)
81//	...
82//
83// Use bloom filter:
84//
85//	o := &opt.Options{
86//		Filter: filter.NewBloomFilter(10),
87//	}
88//	db, err := leveldb.OpenFile("path/to/db", o)
89//	...
90//	defer db.Close()
91//	...
92package leveldb
93