mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
| // 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)
 | |
| }
 |