libstd: convert chained ifs to a match in base64.

This commit is contained in:
Huon Wilson
2013-05-08 23:50:15 +10:00
parent b6f9295654
commit ad5ee00c93

View File

@@ -156,31 +156,27 @@ impl FromBase64 for ~[u8] {
let ch = self[i] as char; let ch = self[i] as char;
n <<= 6u; n <<= 6u;
if ch >= 'A' && ch <= 'Z' { match ch {
n |= (ch as uint) - 0x41u; 'A'..'Z' => n |= (ch as uint) - 0x41,
} else if ch >= 'a' && ch <= 'z' { 'a'..'z' => n |= (ch as uint) - 0x47,
n |= (ch as uint) - 0x47u; '0'..'9' => n |= (ch as uint) + 0x04,
} else if ch >= '0' && ch <= '9' { '+' => n |= 0x3E,
n |= (ch as uint) + 0x04u; '/' => n |= 0x3F,
} else if ch == '+' { '=' => {
n |= 0x3Eu; match len - i {
} else if ch == '/' { 1u => {
n |= 0x3Fu; r.push(((n >> 16u) & 0xFFu) as u8);
} else if ch == '=' { r.push(((n >> 8u ) & 0xFFu) as u8);
match len - i { return copy r;
1u => { }
r.push(((n >> 16u) & 0xFFu) as u8); 2u => {
r.push(((n >> 8u ) & 0xFFu) as u8); r.push(((n >> 10u) & 0xFFu) as u8);
return copy r; return copy r;
} }
2u => { _ => fail!(~"invalid base64 padding")
r.push(((n >> 10u) & 0xFFu) as u8); }
return copy r;
}
_ => fail!(~"invalid base64 padding")
} }
} else { _ => fail!(~"invalid base64 character")
fail!(~"invalid base64 character");
} }
i += 1u; i += 1u;