1// Copyright 2014-2021 Ulrich Kunitz. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package lzma 6 7import "errors" 8 9// MatchAlgorithm identifies an algorithm to find matches in the 10// dictionary. 11type MatchAlgorithm byte 12 13// Supported matcher algorithms. 14const ( 15 HashTable4 MatchAlgorithm = iota 16 BinaryTree 17) 18 19// maStrings are used by the String method. 20var maStrings = map[MatchAlgorithm]string{ 21 HashTable4: "HashTable4", 22 BinaryTree: "BinaryTree", 23} 24 25// String returns a string representation of the Matcher. 26func (a MatchAlgorithm) String() string { 27 if s, ok := maStrings[a]; ok { 28 return s 29 } 30 return "unknown" 31} 32 33var errUnsupportedMatchAlgorithm = errors.New( 34 "lzma: unsupported match algorithm value") 35 36// verify checks whether the matcher value is supported. 37func (a MatchAlgorithm) verify() error { 38 if _, ok := maStrings[a]; !ok { 39 return errUnsupportedMatchAlgorithm 40 } 41 return nil 42} 43 44func (a MatchAlgorithm) new(dictCap int) (m matcher, err error) { 45 switch a { 46 case HashTable4: 47 return newHashTable(dictCap, 4) 48 case BinaryTree: 49 return newBinTree(dictCap) 50 } 51 return nil, errUnsupportedMatchAlgorithm 52} 53