mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 03:07:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2011 The LevelDB-Go and Pebble Authors. All rights reserved. Use
 | 
						|
// of this source code is governed by a BSD-style license that can be found in
 | 
						|
// the LICENSE file.
 | 
						|
 | 
						|
package base
 | 
						|
 | 
						|
// SSTable block defaults.
 | 
						|
const (
 | 
						|
	DefaultBlockRestartInterval = 16
 | 
						|
	DefaultBlockSize            = 4096
 | 
						|
	DefaultBlockSizeThreshold   = 90
 | 
						|
)
 | 
						|
 | 
						|
// FilterType is the level at which to apply a filter: block or table.
 | 
						|
type FilterType int
 | 
						|
 | 
						|
// The available filter types.
 | 
						|
const (
 | 
						|
	TableFilter FilterType = iota
 | 
						|
)
 | 
						|
 | 
						|
func (t FilterType) String() string {
 | 
						|
	switch t {
 | 
						|
	case TableFilter:
 | 
						|
		return "table"
 | 
						|
	}
 | 
						|
	return "unknown"
 | 
						|
}
 | 
						|
 | 
						|
// FilterWriter provides an interface for creating filter blocks. See
 | 
						|
// FilterPolicy for more details about filters.
 | 
						|
type FilterWriter interface {
 | 
						|
	// AddKey adds a key to the current filter block.
 | 
						|
	AddKey(key []byte)
 | 
						|
 | 
						|
	// Finish appends to dst an encoded filter tha holds the current set of
 | 
						|
	// keys. The writer state is reset after the call to Finish allowing the
 | 
						|
	// writer to be reused for the creation of additional filters.
 | 
						|
	Finish(dst []byte) []byte
 | 
						|
}
 | 
						|
 | 
						|
// FilterPolicy is an algorithm for probabilistically encoding a set of keys.
 | 
						|
// The canonical implementation is a Bloom filter.
 | 
						|
//
 | 
						|
// Every FilterPolicy has a name. This names the algorithm itself, not any one
 | 
						|
// particular instance. Aspects specific to a particular instance, such as the
 | 
						|
// set of keys or any other parameters, will be encoded in the []byte filter
 | 
						|
// returned by NewWriter.
 | 
						|
//
 | 
						|
// The name may be written to files on disk, along with the filter data. To use
 | 
						|
// these filters, the FilterPolicy name at the time of writing must equal the
 | 
						|
// name at the time of reading. If they do not match, the filters will be
 | 
						|
// ignored, which will not affect correctness but may affect performance.
 | 
						|
type FilterPolicy interface {
 | 
						|
	// Name names the filter policy.
 | 
						|
	Name() string
 | 
						|
 | 
						|
	// MayContain returns whether the encoded filter may contain given key.
 | 
						|
	// False positives are possible, where it returns true for keys not in the
 | 
						|
	// original set.
 | 
						|
	MayContain(ftype FilterType, filter, key []byte) bool
 | 
						|
 | 
						|
	// NewWriter creates a new FilterWriter.
 | 
						|
	NewWriter(ftype FilterType) FilterWriter
 | 
						|
}
 | 
						|
 | 
						|
// BlockPropertyFilter is used in an Iterator to filter sstables and blocks
 | 
						|
// within the sstable. It should not maintain any per-sstable state, and must
 | 
						|
// be thread-safe.
 | 
						|
type BlockPropertyFilter interface {
 | 
						|
	// Name returns the name of the block property collector.
 | 
						|
	Name() string
 | 
						|
	// Intersects returns true if the set represented by prop intersects with
 | 
						|
	// the set in the filter.
 | 
						|
	Intersects(prop []byte) (bool, error)
 | 
						|
}
 |