codeimage

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.
3import std.bytes { Bytes }
5export function 거듭제곱이(지수: int) -> int {
6 let mut 값 = 1
7 let mut 색인 = 0
8 while 색인 < 지수 { 값 = 값 * 2; 색인 = 색인 + 1 }
9 값
12export 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 }
31export function 바이트배열로(입력: Bytes) -> Array<int> {
32 let 글자들 = 입력.toHex().scalars()
33 let mut 결과: Array<int> = []
34 let mut 색인 = 0
35 while 색인 < 글자들.length {
36 결과.push(십육진숫자(글자들[색인]) * 16 + 십육진숫자(글자들[색인 + 1]))
37 색인 = 색인 + 2
38 }
39 결과
42export 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(""))
53export function 배열같음(왼쪽: Array<int>, 오른쪽: Array<int>) -> bool {
54 if 왼쪽.length != 오른쪽.length { return false }
55 let mut 색인 = 0
56 while 색인 < 왼쪽.length {
57 if 왼쪽[색인] != 오른쪽[색인] { return false }
58 색인 = 색인 + 1
59 }
60 true
63export function 부분배열(입력: Array<int>, 시작: int, 끝: int) -> Array<int> {
64 let mut 결과: Array<int> = []
65 let mut 색인 = 시작
66 while 색인 < 끝 { 결과.push(입력[색인]); 색인 = 색인 + 1 }
67 결과
70export function 바이트추가(대상: Array<int>, 원본: Array<int>) -> Array<int> {
71 let mut 결과 = 대상
72 for 값 in 원본 { 결과.push(값) }
73 결과
76export function 비트배타합(왼쪽: int, 오른쪽: int, 자리수: int) -> int {
77 let mut 왼 = 왼쪽
78 let mut 오 = 오른쪽
79 let mut 자리 = 1
80 let mut 결과 = 0
81 let mut 색인 = 0
82 while 색인 < 자리수 {
83 if (왼 % 2) != (오 % 2) { 결과 = 결과 + 자리 }
84 왼 = 왼 / 2
85 오 = 오 / 2
86 자리 = 자리 * 2
87 색인 = 색인 + 1
88 }
89 결과
92export function 작은값(왼쪽: int, 오른쪽: int) -> int { if 왼쪽 < 오른쪽 { 왼쪽 } else { 오른쪽 } }
93export function 큰값(왼쪽: int, 오른쪽: int) -> int { if 왼쪽 > 오른쪽 { 왼쪽 } else { 오른쪽 } }
95export function 문자열배열에있음(값들: Array<string>, 찾기: string) -> bool {
96 for 값 in 값들 { if 값 == 찾기 { return true } }
97 false

SHA256 21a28aac8b6c6e0276c5cd1da0d7e049d3d5a400d4e2be8bc2bed0e3cde0612d