summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/internal/triegen/example_compact_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/internal/triegen/example_compact_test.go')
-rw-r--r--vendor/golang.org/x/text/internal/triegen/example_compact_test.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/triegen/example_compact_test.go b/vendor/golang.org/x/text/internal/triegen/example_compact_test.go
new file mode 100644
index 0000000..7cf604c
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/triegen/example_compact_test.go
@@ -0,0 +1,71 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package triegen_test
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+
+ "golang.org/x/text/internal/triegen"
+)
+
+func ExampleCompacter() {
+ t := triegen.NewTrie("root")
+ for r := rune(0); r < 10000; r += 64 {
+ t.Insert(r, 0x9015BADA55^uint64(r))
+ }
+ sz, _ := t.Gen(ioutil.Discard)
+
+ fmt.Printf("Size normal: %5d\n", sz)
+
+ var c myCompacter
+ sz, _ = t.Gen(ioutil.Discard, triegen.Compact(&c))
+
+ fmt.Printf("Size compacted: %5d\n", sz)
+
+ // Output:
+ // Size normal: 81344
+ // Size compacted: 3224
+}
+
+// A myCompacter accepts a block if only the first value is given.
+type myCompacter []uint64
+
+func (c *myCompacter) Size(values []uint64) (sz int, ok bool) {
+ for _, v := range values[1:] {
+ if v != 0 {
+ return 0, false
+ }
+ }
+ return 8, true // the size of a uint64
+}
+
+func (c *myCompacter) Store(v []uint64) uint32 {
+ x := uint32(len(*c))
+ *c = append(*c, v[0])
+ return x
+}
+
+func (c *myCompacter) Print(w io.Writer) error {
+ fmt.Fprintln(w, "var firstValue = []uint64{")
+ for _, v := range *c {
+ fmt.Fprintf(w, "\t%#x,\n", v)
+ }
+ fmt.Fprintln(w, "}")
+ return nil
+}
+
+func (c *myCompacter) Handler() string {
+ return "getFirstValue"
+
+ // Where getFirstValue is included along with the generated code:
+ // func getFirstValue(n uint32, b byte) uint64 {
+ // if b == 0x80 { // the first continuation byte
+ // return firstValue[n]
+ // }
+ // return 0
+ // }
+}