1// Copyright 2014 The Go Authors. 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 colltab
6
7// testWeighter is a simple Weighter that returns weights from a user-defined map.
8type testWeighter map[string][]Elem
9
10func (t testWeighter) Start(int, []byte) int       { return 0 }
11func (t testWeighter) StartString(int, string) int { return 0 }
12func (t testWeighter) Domain() []string            { return nil }
13func (t testWeighter) Top() uint32                 { return 0 }
14
15// maxContractBytes is the maximum length of any key in the map.
16const maxContractBytes = 10
17
18func (t testWeighter) AppendNext(buf []Elem, s []byte) ([]Elem, int) {
19	n := len(s)
20	if n > maxContractBytes {
21		n = maxContractBytes
22	}
23	for i := n; i > 0; i-- {
24		if e, ok := t[string(s[:i])]; ok {
25			return append(buf, e...), i
26		}
27	}
28	panic("incomplete testWeighter: could not find " + string(s))
29}
30
31func (t testWeighter) AppendNextString(buf []Elem, s string) ([]Elem, int) {
32	n := len(s)
33	if n > maxContractBytes {
34		n = maxContractBytes
35	}
36	for i := n; i > 0; i-- {
37		if e, ok := t[s[:i]]; ok {
38			return append(buf, e...), i
39		}
40	}
41	panic("incomplete testWeighter: could not find " + s)
42}
43