///|
pub fn parse_decimal(input : String, begin : Int, end : Int) -> Option[Int] {
if begin == end { return None }
let mut val = 0
let mut i = begin
while i < end {
let c = input[i]
if c >= '0' && c <= '9' {
val = val * 10 + (c.to_int() - '0'.to_int())
} else { return None }
i += 1
}
Some(val)
}
///|
pub fn parse_hex(input : String, begin : Int, end : Int) -> Option[Int] {
if begin == end { return None }
let mut val = 0
let mut i = begin
while i < end {
let c = input[i]
let digit = if c >= '0' && c <= '9' {
c.to_int() - '0'.to_int()
} else if c >= 'a' && c <= 'f' {
c.to_int() - 'a'.to_int() + 10
} else if c >= 'A' && c <= 'F' {
c.to_int() - 'A'.to_int() + 10
} else { return None }
val = val * 16 + digit
i += 1
}
Some(val)
}