1 type StringBuilder = 2 let list = List<Char>.new 3 4 fun get (i : u32) = list[i] 5 6 def length = list.size 7 def is_empty = list.is_empty 8 def is_not_empty = list.is_not_empty 9 10 def append (c : Char) = list.add c 11 def insert (i : u32) (c : Char) = list.add i c 12 13 def append (s : String) = 14 list.provision (list.size + s.length) 15 for i = 0 until s.length do 16 let c = s[i] 17 if c <> '\r' then 18 list.add c 19 else if i + 1 < s.length && s[i + 1] <> '\n' then 20 list.add '\n' 21 22 def append @secondary (s : CString) = 23 let length = 24 let mut index = 0 25 while s[index] <> '\0' do 26 index += 1 27 28 index 29 30 list.provision (list.size + length) 31 for i = 0 until length do 32 let c = s[i] 33 if c <> '\r' then 34 list.add c.as<Char> 35 else if i + 1 < s.length && s[i + 1] <> '\n' then 36 list.add '\n' 37 38 def insert (i : u32) (s : String) = 39 list.provision (list.size + s.length) 40 let l = s.length 41 42 for j = l - 1 downto 0 do 43 list[j + i + l] = list[j + j] 44 45 for j = 0 until l do 46 list[j + i] = s[j] 47 48 def pop = 49 list.remove_last 50 51 def remove_at (i : u32) = 52 list.remove_at i 53 54 def remove_at @secondary (i : i32) = 55 list.remove_at i 56 57 def remove_range (start : u32) (end : u32) : Unit = 58 fail 59 60 def replace_range (start : u32 61 end : u32 62 s : String) : Unit = 63 fail 64 65 def clear = 66 list.clear 67 68 def as_string = String list.as_ptr list.size 69 70 def create = 71 let ptr = kedr/alloc<Char> list.size 72 for i = 0 until list.size do 73 ptr[i] = list[i] 74 75 String ptr list.size 76