60 lines
2.3 KiB
Go
60 lines
2.3 KiB
Go
|
// This file was generated by go generate; DO NOT EDIT
|
||
|
|
||
|
package runenames
|
||
|
|
||
|
// This file contains code common to gen.go and the package code.
|
||
|
|
||
|
// The mapping from rune to string (i.e. offset and length in the data string)
|
||
|
// is encoded as a two level table. The first level maps from contiguous rune
|
||
|
// ranges [runeOffset, runeOffset+runeLength) to entries. Entries are either
|
||
|
// direct (for repeated names such as "<CJK Ideograph>") or indirect (for runs
|
||
|
// of unique names such as "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", ...).
|
||
|
//
|
||
|
// Each first level table element is 64 bits. The runeOffset (21 bits) and
|
||
|
// runeLength (16 bits) take the 37 high bits. The entry takes the 27 low bits,
|
||
|
// with directness encoded in the least significant bit.
|
||
|
//
|
||
|
// A direct entry encodes a dataOffset (18 bits) and dataLength (8 bits) in the
|
||
|
// data string. 18 bits is too short to encode the entire data string's length,
|
||
|
// but the data string's contents are arranged so that all of the few direct
|
||
|
// entries' offsets come before all of the many indirect entries' offsets.
|
||
|
//
|
||
|
// An indirect entry encodes a dataBase (10 bits) and a table1Offset (16 bits).
|
||
|
// The table1Offset is the start of a range in the second level table. The
|
||
|
// length of that range is the same as the runeLength.
|
||
|
//
|
||
|
// Each second level table element is 16 bits, an index into data, relative to
|
||
|
// a bias equal to (dataBase << dataBaseUnit). That (bias + index) is the
|
||
|
// (dataOffset + dataLength) in the data string. The dataOffset is implied by
|
||
|
// the previous table element (with the same implicit bias).
|
||
|
|
||
|
const (
|
||
|
bitsRuneOffset = 21
|
||
|
bitsRuneLength = 16
|
||
|
bitsDataOffset = 18
|
||
|
bitsDataLength = 8
|
||
|
bitsDirect = 1
|
||
|
|
||
|
bitsDataBase = 10
|
||
|
bitsTable1Offset = 16
|
||
|
|
||
|
shiftRuneOffset = 0 + bitsDirect + bitsDataLength + bitsDataOffset + bitsRuneLength
|
||
|
shiftRuneLength = 0 + bitsDirect + bitsDataLength + bitsDataOffset
|
||
|
shiftDataOffset = 0 + bitsDirect + bitsDataLength
|
||
|
shiftDataLength = 0 + bitsDirect
|
||
|
shiftDirect = 0
|
||
|
|
||
|
shiftDataBase = 0 + bitsDirect + bitsTable1Offset
|
||
|
shiftTable1Offset = 0 + bitsDirect
|
||
|
|
||
|
maskRuneLength = 1<<bitsRuneLength - 1
|
||
|
maskDataOffset = 1<<bitsDataOffset - 1
|
||
|
maskDataLength = 1<<bitsDataLength - 1
|
||
|
maskDirect = 1<<bitsDirect - 1
|
||
|
|
||
|
maskDataBase = 1<<bitsDataBase - 1
|
||
|
maskTable1Offset = 1<<bitsTable1Offset - 1
|
||
|
|
||
|
dataBaseUnit = 10
|
||
|
)
|