STUDIO HAZE · image
Topaz source
Open by house policy. Topaz is our own language.
Topaz 5.9 · 42 files
topaz/src/util.tpz
Topaz · 3076 B · Original file
1
// Shared byte, integer, and collection helpers.3
import std.bytes { Bytes }5
export function 거듭제곱이(지수: int) -> int {6
let mut 값 = 17
let mut 색인 = 08
while 색인 < 지수 { 값 = 값 * 2; 색인 = 색인 + 1 }9
값10
}12
export function 십육진숫자(글자: string) -> int {13
if 글자 == "0" { return 0 }14
if 글자 == "1" { return 1 }15
if 글자 == "2" { return 2 }16
if 글자 == "3" { return 3 }17
if 글자 == "4" { return 4 }18
if 글자 == "5" { return 5 }19
if 글자 == "6" { return 6 }20
if 글자 == "7" { return 7 }21
if 글자 == "8" { return 8 }22
if 글자 == "9" { return 9 }23
if 글자 == "a" { return 10 }24
if 글자 == "b" { return 11 }25
if 글자 == "c" { return 12 }26
if 글자 == "d" { return 13 }27
if 글자 == "e" { return 14 }28
if 글자 == "f" { 15 } else { 0 }29
}31
export function 바이트배열로(입력: Bytes) -> Array<int> {32
let 글자들 = 입력.toHex().scalars()33
let mut 결과: Array<int> = []34
let mut 색인 = 035
while 색인 < 글자들.length {36
결과.push(십육진숫자(글자들[색인]) * 16 + 십육진숫자(글자들[색인 + 1]))37
색인 = 색인 + 238
}39
결과40
}42
export function 바이트로(입력: Array<int>) -> Result<Bytes, string> {43
let 숫자들 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]44
let mut 조각들: Array<string> = []45
for 값 in 입력 {46
if 값 < 0 || 값 > 255 { return Err("바이트 범위를 벗어났습니다") }47
조각들.push(숫자들[값 / 16])48
조각들.push(숫자들[값 % 16])49
}50
Bytes.fromHex(조각들.join(""))51
}53
export function 배열같음(왼쪽: Array<int>, 오른쪽: Array<int>) -> bool {54
if 왼쪽.length != 오른쪽.length { return false }55
let mut 색인 = 056
while 색인 < 왼쪽.length {57
if 왼쪽[색인] != 오른쪽[색인] { return false }58
색인 = 색인 + 159
}60
true61
}63
export function 부분배열(입력: Array<int>, 시작: int, 끝: int) -> Array<int> {64
let mut 결과: Array<int> = []65
let mut 색인 = 시작66
while 색인 < 끝 { 결과.push(입력[색인]); 색인 = 색인 + 1 }67
결과68
}70
export function 바이트추가(대상: Array<int>, 원본: Array<int>) -> Array<int> {71
let mut 결과 = 대상72
for 값 in 원본 { 결과.push(값) }73
결과74
}76
export function 비트배타합(왼쪽: int, 오른쪽: int, 자리수: int) -> int {77
let mut 왼 = 왼쪽78
let mut 오 = 오른쪽79
let mut 자리 = 180
let mut 결과 = 081
let mut 색인 = 082
while 색인 < 자리수 {83
if (왼 % 2) != (오 % 2) { 결과 = 결과 + 자리 }84
왼 = 왼 / 285
오 = 오 / 286
자리 = 자리 * 287
색인 = 색인 + 188
}89
결과90
}92
export function 작은값(왼쪽: int, 오른쪽: int) -> int { if 왼쪽 < 오른쪽 { 왼쪽 } else { 오른쪽 } }93
export function 큰값(왼쪽: int, 오른쪽: int) -> int { if 왼쪽 > 오른쪽 { 왼쪽 } else { 오른쪽 } }95
export function 문자열배열에있음(값들: Array<string>, 찾기: string) -> bool {96
for 값 in 값들 { if 값 == 찾기 { return true } }97
false98
}SHA256 21a28aac8b6c6e0276c5cd1da0d7e049d3d5a400d4e2be8bc2bed0e3cde0612d