diff options
author | Alex Pilon <apilon@hashicorp.com> | 2019-02-22 18:24:37 -0500 |
---|---|---|
committer | Alex Pilon <apilon@hashicorp.com> | 2019-02-22 18:24:37 -0500 |
commit | 15c0b25d011f37e7c20aeca9eaf461f78285b8d9 (patch) | |
tree | 255c250a5c9d4801c74092d33b7337d8c14438ff /vendor/github.com/ulikunitz/xz/lzma/state.go | |
parent | 07971ca38143c5faf951d152fba370ddcbe26ad5 (diff) | |
download | terraform-provider-statuscake-15c0b25d011f37e7c20aeca9eaf461f78285b8d9.tar.gz terraform-provider-statuscake-15c0b25d011f37e7c20aeca9eaf461f78285b8d9.tar.zst terraform-provider-statuscake-15c0b25d011f37e7c20aeca9eaf461f78285b8d9.zip |
deps: github.com/hashicorp/terraform@sdk-v0.11-with-go-modules
Updated via: go get github.com/hashicorp/terraform@sdk-v0.11-with-go-modules and go mod tidy
Diffstat (limited to 'vendor/github.com/ulikunitz/xz/lzma/state.go')
-rw-r--r-- | vendor/github.com/ulikunitz/xz/lzma/state.go | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/vendor/github.com/ulikunitz/xz/lzma/state.go b/vendor/github.com/ulikunitz/xz/lzma/state.go new file mode 100644 index 0000000..5023510 --- /dev/null +++ b/vendor/github.com/ulikunitz/xz/lzma/state.go | |||
@@ -0,0 +1,151 @@ | |||
1 | // Copyright 2014-2017 Ulrich Kunitz. 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 | |||
5 | package lzma | ||
6 | |||
7 | // states defines the overall state count | ||
8 | const states = 12 | ||
9 | |||
10 | // State maintains the full state of the operation encoding or decoding | ||
11 | // process. | ||
12 | type state struct { | ||
13 | rep [4]uint32 | ||
14 | isMatch [states << maxPosBits]prob | ||
15 | isRepG0Long [states << maxPosBits]prob | ||
16 | isRep [states]prob | ||
17 | isRepG0 [states]prob | ||
18 | isRepG1 [states]prob | ||
19 | isRepG2 [states]prob | ||
20 | litCodec literalCodec | ||
21 | lenCodec lengthCodec | ||
22 | repLenCodec lengthCodec | ||
23 | distCodec distCodec | ||
24 | state uint32 | ||
25 | posBitMask uint32 | ||
26 | Properties Properties | ||
27 | } | ||
28 | |||
29 | // initProbSlice initializes a slice of probabilities. | ||
30 | func initProbSlice(p []prob) { | ||
31 | for i := range p { | ||
32 | p[i] = probInit | ||
33 | } | ||
34 | } | ||
35 | |||
36 | // Reset sets all state information to the original values. | ||
37 | func (s *state) Reset() { | ||
38 | p := s.Properties | ||
39 | *s = state{ | ||
40 | Properties: p, | ||
41 | // dict: s.dict, | ||
42 | posBitMask: (uint32(1) << uint(p.PB)) - 1, | ||
43 | } | ||
44 | initProbSlice(s.isMatch[:]) | ||
45 | initProbSlice(s.isRep[:]) | ||
46 | initProbSlice(s.isRepG0[:]) | ||
47 | initProbSlice(s.isRepG1[:]) | ||
48 | initProbSlice(s.isRepG2[:]) | ||
49 | initProbSlice(s.isRepG0Long[:]) | ||
50 | s.litCodec.init(p.LC, p.LP) | ||
51 | s.lenCodec.init() | ||
52 | s.repLenCodec.init() | ||
53 | s.distCodec.init() | ||
54 | } | ||
55 | |||
56 | // initState initializes the state. | ||
57 | func initState(s *state, p Properties) { | ||
58 | *s = state{Properties: p} | ||
59 | s.Reset() | ||
60 | } | ||
61 | |||
62 | // newState creates a new state from the give Properties. | ||
63 | func newState(p Properties) *state { | ||
64 | s := &state{Properties: p} | ||
65 | s.Reset() | ||
66 | return s | ||
67 | } | ||
68 | |||
69 | // deepcopy initializes s as a deep copy of the source. | ||
70 | func (s *state) deepcopy(src *state) { | ||
71 | if s == src { | ||
72 | return | ||
73 | } | ||
74 | s.rep = src.rep | ||
75 | s.isMatch = src.isMatch | ||
76 | s.isRepG0Long = src.isRepG0Long | ||
77 | s.isRep = src.isRep | ||
78 | s.isRepG0 = src.isRepG0 | ||
79 | s.isRepG1 = src.isRepG1 | ||
80 | s.isRepG2 = src.isRepG2 | ||
81 | s.litCodec.deepcopy(&src.litCodec) | ||
82 | s.lenCodec.deepcopy(&src.lenCodec) | ||
83 | s.repLenCodec.deepcopy(&src.repLenCodec) | ||
84 | s.distCodec.deepcopy(&src.distCodec) | ||
85 | s.state = src.state | ||
86 | s.posBitMask = src.posBitMask | ||
87 | s.Properties = src.Properties | ||
88 | } | ||
89 | |||
90 | // cloneState creates a new clone of the give state. | ||
91 | func cloneState(src *state) *state { | ||
92 | s := new(state) | ||
93 | s.deepcopy(src) | ||
94 | return s | ||
95 | } | ||
96 | |||
97 | // updateStateLiteral updates the state for a literal. | ||
98 | func (s *state) updateStateLiteral() { | ||
99 | switch { | ||
100 | case s.state < 4: | ||
101 | s.state = 0 | ||
102 | return | ||
103 | case s.state < 10: | ||
104 | s.state -= 3 | ||
105 | return | ||
106 | } | ||
107 | s.state -= 6 | ||
108 | } | ||
109 | |||
110 | // updateStateMatch updates the state for a match. | ||
111 | func (s *state) updateStateMatch() { | ||
112 | if s.state < 7 { | ||
113 | s.state = 7 | ||
114 | } else { | ||
115 | s.state = 10 | ||
116 | } | ||
117 | } | ||
118 | |||
119 | // updateStateRep updates the state for a repetition. | ||
120 | func (s *state) updateStateRep() { | ||
121 | if s.state < 7 { | ||
122 | s.state = 8 | ||
123 | } else { | ||
124 | s.state = 11 | ||
125 | } | ||
126 | } | ||
127 | |||
128 | // updateStateShortRep updates the state for a short repetition. | ||
129 | func (s *state) updateStateShortRep() { | ||
130 | if s.state < 7 { | ||
131 | s.state = 9 | ||
132 | } else { | ||
133 | s.state = 11 | ||
134 | } | ||
135 | } | ||
136 | |||
137 | // states computes the states of the operation codec. | ||
138 | func (s *state) states(dictHead int64) (state1, state2, posState uint32) { | ||
139 | state1 = s.state | ||
140 | posState = uint32(dictHead) & s.posBitMask | ||
141 | state2 = (s.state << maxPosBits) | posState | ||
142 | return | ||
143 | } | ||
144 | |||
145 | // litState computes the literal state. | ||
146 | func (s *state) litState(prev byte, dictHead int64) uint32 { | ||
147 | lp, lc := uint(s.Properties.LP), uint(s.Properties.LC) | ||
148 | litState := ((uint32(dictHead) & ((1 << lp) - 1)) << lc) | | ||
149 | (uint32(prev) >> (8 - lc)) | ||
150 | return litState | ||
151 | } | ||