text: // Copyright 2014-2019 Ulrich Kunitz. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  package lzma
  
  import "errors"
  
  // MatchAlgorithm identifies an algorithm to find matches in the
  // dictionary.
  type MatchAlgorithm byte
  
  // Supported matcher algorithms.
  const (
  	HashTable4 MatchAlgorithm = iota
  	BinaryTree
  )
  
  // maStrings are used by the String method.
  var maStrings = map[MatchAlgorithm]string{
  	HashTable4: "HashTable4",
  	BinaryTree: "BinaryTree",
  }
  
  // String returns a string representation of the Matcher.
  func (a MatchAlgorithm) String() string {
  	if s, ok := maStrings[a]; ok {
  		return s
  	}
  	return "unknown"
  }
  
  var errUnsupportedMatchAlgorithm = errors.New(
  	"lzma: unsupported match algorithm value")
  
  // verify checks whether the matcher value is supported.
  func (a MatchAlgorithm) verify() error {
  	if _, ok := maStrings[a]; !ok {
  		return errUnsupportedMatchAlgorithm
  	}
  	return nil
  }
  
  func (a MatchAlgorithm) new(dictCap int) (m matcher, err error) {
  	switch a {
  	case HashTable4:
  		return newHashTable(dictCap, 4)
  	case BinaryTree:
  		return newBinTree(dictCap)
  	}
  	return nil, errUnsupportedMatchAlgorithm
  }
  