// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///|
fn literal_length_base_bits(code : UInt) -> (Int, Int) raise ZstdError {
if code <= 15 {
(code.reinterpret_as_int(), 0)
} else if code == 16 {
(16, 1)
} else if code == 17 {
(18, 1)
} else if code == 18 {
(20, 1)
} else if code == 19 {
(22, 1)
} else if code == 20 {
(24, 2)
} else if code == 21 {
(28, 2)
} else if code == 22 {
(32, 3)
} else if code == 23 {
(40, 3)
} else if code == 24 {
(48, 4)
} else if code == 25 {
(64, 6)
} else if code == 26 {
(128, 7)
} else if code == 27 {
(256, 8)
} else if code == 28 {
(512, 9)
} else if code == 29 {
(1024, 10)
} else if code == 30 {
(2048, 11)
} else if code == 31 {
(4096, 12)
} else if code == 32 {
(8192, 13)
} else if code == 33 {
(16384, 14)
} else if code == 34 {
(32768, 15)
} else if code == 35 {
(65536, 16)
} else {
raise CorruptionDetected
}
}
///|
fn match_length_base_bits(code : UInt) -> (Int, Int) raise ZstdError {
if code <= 31 {
(code.reinterpret_as_int() + 3, 0)
} else if code == 32 {
(35, 1)
} else if code == 33 {
(37, 1)
} else if code == 34 {
(39, 1)
} else if code == 35 {
(41, 1)
} else if code == 36 {
(43, 2)
} else if code == 37 {
(47, 2)
} else if code == 38 {
(51, 3)
} else if code == 39 {
(59, 3)
} else if code == 40 {
(67, 4)
} else if code == 41 {
(83, 4)
} else if code == 42 {
(99, 5)
} else if code == 43 {
(131, 7)
} else if code == 44 {
(259, 8)
} else if code == 45 {
(515, 9)
} else if code == 46 {
(1027, 10)
} else if code == 47 {
(2051, 11)
} else if code == 48 {
(4099, 12)
} else if code == 49 {
(8195, 13)
} else if code == 50 {
(16387, 14)
} else if code == 51 {
(32771, 15)
} else if code == 52 {
(65539, 16)
} else {
raise CorruptionDetected
}
}