// Copyright 2012 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.// The trie in this file is used to associate the first full character in an// UTF-8 string to a collation element. All but the last byte in a UTF-8 byte// sequence are used to lookup offsets in the index table to be used for the// next byte. The last byte is used to index into a table of collation elements.// For a full description, see go.text/collate/build/trie.go.package colltabconst blockSize = 64typeTriestruct { Index0 []uint16// index for first byte (0xC0-0xFF) Values0 []uint32// index for first byte (0x00-0x7F) Index []uint16 Values []uint32}const ( t1 = 0x00// 0000 0000 tx = 0x80// 1000 0000 t2 = 0xC0// 1100 0000 t3 = 0xE0// 1110 0000 t4 = 0xF0// 1111 0000 t5 = 0xF8// 1111 1000 t6 = 0xFC// 1111 1100 te = 0xFE// 1111 1110)func ( *Trie) ( uint16, byte) Elem {returnElem(.Values[int()<<6+int()])}// lookup returns the trie value for the first UTF-8 encoding in s and// the width in bytes of this encoding. The size will be 0 if s does not// hold enough bytes to complete the encoding. len(s) must be greater than 0.func ( *Trie) ( []byte) ( Elem, int) { := [0]switch {case < tx:returnElem(.Values0[]), 1case < t2:return0, 1case < t3:iflen() < 2 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 }return .lookupValue(, ), 2case < t4:iflen() < 3 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 } := int()<<6 + int() = .Index[] := [2]if < tx || t2 <= {return0, 2 }return .lookupValue(, ), 3case < t5:iflen() < 4 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 } := int()<<6 + int() = .Index[] := [2]if < tx || t2 <= {return0, 2 } = int()<<6 + int() = .Index[] := [3]if < tx || t2 <= {return0, 3 }return .lookupValue(, ), 4 }// Illegal runereturn0, 1}// The body of lookupString is a verbatim copy of that of lookup.func ( *Trie) ( string) ( Elem, int) { := [0]switch {case < tx:returnElem(.Values0[]), 1case < t2:return0, 1case < t3:iflen() < 2 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 }return .lookupValue(, ), 2case < t4:iflen() < 3 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 } := int()<<6 + int() = .Index[] := [2]if < tx || t2 <= {return0, 2 }return .lookupValue(, ), 3case < t5:iflen() < 4 {return0, 0 } := .Index0[] := [1]if < tx || t2 <= {return0, 1 } := int()<<6 + int() = .Index[] := [2]if < tx || t2 <= {return0, 2 } = int()<<6 + int() = .Index[] := [3]if < tx || t2 <= {return0, 3 }return .lookupValue(, ), 4 }// Illegal runereturn0, 1}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.