| 1 | struct ArrayList[T] { |
| 2 | mut: |
| 3 | size usize |
| 4 | items []&T |
| 5 | } |
| 6 | |
| 7 | fn new_array_list[T]() ArrayList[T] { |
| 8 | return ArrayList[T]{} |
| 9 | } |
| 10 | |
| 11 | fn (li ArrayList[T]) is_empty() bool { |
| 12 | return li.size == 0 |
| 13 | } |
| 14 | |
| 15 | fn (mut li ArrayList[T]) add(item &T) { |
| 16 | li.items << item |
| 17 | li.size += 1 |
| 18 | } |
| 19 | |
| 20 | fn (mut li ArrayList[T]) pop() ?&T { |
| 21 | if li.is_empty() { |
| 22 | return none |
| 23 | } else { |
| 24 | item := li.items.last() |
| 25 | li.items.delete_last() |
| 26 | li.size -= 1 |
| 27 | return item |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | struct Student { |
| 32 | name string |
| 33 | mut: |
| 34 | age u8 |
| 35 | } |
| 36 | |
| 37 | fn (mut s Student) grow() { |
| 38 | s.age += 1 |
| 39 | } |
| 40 | |
| 41 | fn test_main() { |
| 42 | mut list := new_array_list[Student]() |
| 43 | assert list.is_empty() && list.size == 0 |
| 44 | |
| 45 | mut stu := Student{'Tom', 16} |
| 46 | list.add(&stu) |
| 47 | assert !list.is_empty() && list.size == 1 |
| 48 | stu.grow() |
| 49 | assert stu.age == 17 |
| 50 | |
| 51 | tom := list.pop()? |
| 52 | assert list.is_empty() && list.size == 0 |
| 53 | assert tom == stu |
| 54 | assert tom.age == 17 |
| 55 | } |
| 56 | |