1    private@
2    
3    type locale_t = MutPtr
4    
5    public@
6    
7    let strtol (str : CString @restrict
8                str_end : mut ptr MutPtr<CChar> @restrict
9                base : int) : long
10   
11   let strtof (str : CString) (str_end : mut ptr MutPtr<CChar>) : f32
12   
13   let try_parse_long (s : String) (base : u32) =
14       let array = s.to_array<17>
15       let c_string = array.to_c_string
16       let mut str_end = null
17       let n = strtol c_string str_end@mut_ptr base.as<int>
18       if str_end[0] == '\0' then Some n else None
19   
20   object u32
21       def parse (s : String) (base : u32) =
22           let n = try_parse_long s base |> unwrap
23           assert n >= 0
24           n as u32
25   
26       def parse (s : String) = parse s 10
27   
28   object i32
29       def try_parse (s : String) (base : u32) =
30           try_parse_long s base |> map { _ as i32 }
31   
32       def try_parse (s : String) = try_parse s 10
33   
34       def parse (s : String) (base : u32) =
35           let n = try_parse_long s base |> unwrap
36           n as i32
37   
38       def parse (s : String) = parse s 10
39   
40   object f32
41       def try_parse (s : String) =
42           let array = s.to_array<17>
43           let c_string = array.to_c_string
44           let mut str_end = null
45           let x = strtof c_string str_end@mut_ptr
46           if str_end[0] == '\0' then Some x else None
47   
48       def parse (s : String) = try_parse s |> unwrap
49