v2 / vlib / v / tests / generics / generics_for_in_iterate_test.v
50 lines · 44 sloc · 728 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1pub struct Vec[T] {
2mut:
3 data &T @[required]
4 cap usize @[required]
5 len usize @[required]
6}
7
8pub fn new[T]() Vec[T] {
9 return Vec[T]{
10 data: unsafe { nil }
11 cap: 0
12 len: 0
13 }
14}
15
16pub fn (ar &Vec[T]) iter() Iter[T] {
17 return Iter[T]{
18 v: unsafe { ar }
19 }
20}
21
22pub struct Iter[T] {
23mut:
24 v &Vec[T] @[required]
25 pos usize
26}
27
28pub fn (mut iter Iter[T]) next() ?&T {
29 if iter.pos >= iter.v.len {
30 return none
31 }
32 defer {
33 iter.pos++
34 }
35 return unsafe { &iter.v.data[iter.pos] }
36}
37
38fn test_generics_for_in_iterate() {
39 mut goods := new[int]()
40 goods.call_generic_fn(fn (a &int) bool {
41 return *a > 1
42 })
43 assert true
44}
45
46fn (arr Vec[T]) call_generic_fn(cb fn (&T) bool) {
47 for val in arr.iter() {
48 println(cb(val))
49 }
50}
51