///|
fn wgsl_naga_oil_base32_nopad(text : String) -> String {
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
let out = StringBuilder()
let mut buffer = 0
let mut bits = 0
for ch in text {
let code = ch.to_int()
let bytes : Array[Int32] = if code <= 0x7F {
[code]
} else if code <= 0x7FF {
[0xC0 | (code >> 6), 0x80 | (code & 0x3F)]
} else if code <= 0xFFFF {
[0xE0 | (code >> 12), 0x80 | ((code >> 6) & 0x3F), 0x80 | (code & 0x3F)]
} else {
[
0xF0 | (code >> 18),
0x80 | ((code >> 12) & 0x3F),
0x80 | ((code >> 6) & 0x3F),
0x80 | (code & 0x3F),
]
}
for byte in bytes {
buffer = (buffer << 8) | byte
bits = bits + 8
while bits >= 5 {
let index = (buffer >> (bits - 5)) & 31
out.write_string(alphabet[index:index + 1].to_owned())
bits = bits - 5
}
}
}
if bits > 0 {
let index = (buffer << (5 - bits)) & 31
out.write_string(alphabet[index:index + 1].to_owned())
}
out.to_string()
}
///|
fn wgsl_naga_oil_module_decoration(module_path : String) -> String {
"X_naga_oil_mod_X\{wgsl_naga_oil_base32_nopad(module_path)}X"
}
///|
fn wgsl_naga_oil_virtual_decoration(module_path : String) -> String {
"X_naga_oil_vrt_X\{wgsl_naga_oil_base32_nopad(module_path)}X"
}
///|
fn wgsl_naga_oil_decorated_final_name(
module_path : String,
original_name : String,
) -> String {
if module_path == "" {
original_name
} else {
"\{original_name}\{wgsl_naga_oil_module_decoration(module_path)}"
}
}
///|
fn wgsl_naga_oil_virtual_override_final_name(
target_module_path : String,
override_module_path : String,
original_name : String,
) -> String {
let virtual_name = if target_module_path == "" {
original_name
} else {
"\{original_name}\{wgsl_naga_oil_virtual_decoration(target_module_path)}"
}
if override_module_path == "" {
virtual_name
} else {
"\{virtual_name}\{wgsl_naga_oil_module_decoration(override_module_path)}"
}
}