|
|
// 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 leveldb
import ( "github.com/syndtr/goleveldb/leveldb/filter" "github.com/syndtr/goleveldb/leveldb/opt" )
func dupOptions(o *opt.Options) *opt.Options { newo := &opt.Options{} if o != nil { *newo = *o } if newo.Strict == 0 { newo.Strict = opt.DefaultStrict } return newo }
func (s *session) setOptions(o *opt.Options) { no := dupOptions(o) // Alternative filters.
if filters := o.GetAltFilters(); len(filters) > 0 { no.AltFilters = make([]filter.Filter, len(filters)) for i, filter := range filters { no.AltFilters[i] = &iFilter{filter} } } // Comparer.
s.icmp = &iComparer{o.GetComparer()} no.Comparer = s.icmp // Filter.
if filter := o.GetFilter(); filter != nil { no.Filter = &iFilter{filter} }
s.o = &cachedOptions{Options: no} s.o.cache() }
const optCachedLevel = 7
type cachedOptions struct { *opt.Options
compactionExpandLimit []int compactionGPOverlaps []int compactionSourceLimit []int compactionTableSize []int compactionTotalSize []int64 }
func (co *cachedOptions) cache() { co.compactionExpandLimit = make([]int, optCachedLevel) co.compactionGPOverlaps = make([]int, optCachedLevel) co.compactionSourceLimit = make([]int, optCachedLevel) co.compactionTableSize = make([]int, optCachedLevel) co.compactionTotalSize = make([]int64, optCachedLevel)
for level := 0; level < optCachedLevel; level++ { co.compactionExpandLimit[level] = co.Options.GetCompactionExpandLimit(level) co.compactionGPOverlaps[level] = co.Options.GetCompactionGPOverlaps(level) co.compactionSourceLimit[level] = co.Options.GetCompactionSourceLimit(level) co.compactionTableSize[level] = co.Options.GetCompactionTableSize(level) co.compactionTotalSize[level] = co.Options.GetCompactionTotalSize(level) } }
func (co *cachedOptions) GetCompactionExpandLimit(level int) int { if level < optCachedLevel { return co.compactionExpandLimit[level] } return co.Options.GetCompactionExpandLimit(level) }
func (co *cachedOptions) GetCompactionGPOverlaps(level int) int { if level < optCachedLevel { return co.compactionGPOverlaps[level] } return co.Options.GetCompactionGPOverlaps(level) }
func (co *cachedOptions) GetCompactionSourceLimit(level int) int { if level < optCachedLevel { return co.compactionSourceLimit[level] } return co.Options.GetCompactionSourceLimit(level) }
func (co *cachedOptions) GetCompactionTableSize(level int) int { if level < optCachedLevel { return co.compactionTableSize[level] } return co.Options.GetCompactionTableSize(level) }
func (co *cachedOptions) GetCompactionTotalSize(level int) int64 { if level < optCachedLevel { return co.compactionTotalSize[level] } return co.Options.GetCompactionTotalSize(level) }
|