60 lines
2 KiB
Go
60 lines
2 KiB
Go
// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
|
|
// All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Package filter provides interface and implementation of probabilistic
|
|
// data structure.
|
|
//
|
|
// The filter is resposible for creating small filter from a set of keys.
|
|
// These filter will then used to test whether a key is a member of the set.
|
|
// In many cases, a filter can cut down the number of disk seeks from a
|
|
// handful to a single disk seek per DB.Get call.
|
|
package filter
|
|
|
|
// Buffer is the interface that wraps basic Alloc, Write and WriteByte methods.
|
|
type Buffer interface {
|
|
// Alloc allocs n bytes of slice from the buffer. This also advancing
|
|
// write offset.
|
|
Alloc(n int) []byte
|
|
|
|
// Write appends the contents of p to the buffer.
|
|
Write(p []byte) (n int, err error)
|
|
|
|
// WriteByte appends the byte c to the buffer.
|
|
WriteByte(c byte) error
|
|
}
|
|
|
|
// Filter is the filter.
|
|
type Filter interface {
|
|
// Name returns the name of this policy.
|
|
//
|
|
// Note that if the filter encoding changes in an incompatible way,
|
|
// the name returned by this method must be changed. Otherwise, old
|
|
// incompatible filters may be passed to methods of this type.
|
|
Name() string
|
|
|
|
// NewGenerator creates a new filter generator.
|
|
NewGenerator() FilterGenerator
|
|
|
|
// Contains returns true if the filter contains the given key.
|
|
//
|
|
// The filter are filters generated by the filter generator.
|
|
Contains(filter, key []byte) bool
|
|
}
|
|
|
|
// FilterGenerator is the filter generator.
|
|
type FilterGenerator interface {
|
|
// Add adds a key to the filter generator.
|
|
//
|
|
// The key may become invalid after call to this method end, therefor
|
|
// key must be copied if implementation require keeping key for later
|
|
// use. The key should not modified directly, doing so may cause
|
|
// undefined results.
|
|
Add(key []byte)
|
|
|
|
// Generate generates filters based on keys passed so far. After call
|
|
// to Generate the filter generator maybe resetted, depends on implementation.
|
|
Generate(b Buffer)
|
|
}
|