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