github.com/tursom/GoCollections@v0.3.10/util/mr/utils.go (about) 1 package mr 2 3 import ( 4 "github.com/tursom/GoCollections/collections" 5 "github.com/tursom/GoCollections/lang" 6 ) 7 8 type MapEntry[K comparable, V any] struct { 9 key K 10 value V 11 } 12 13 func MapChannel[K comparable, V any](m map[K]V) lang.ReceiveChannel[*MapEntry[K, V]] { 14 ch := make(lang.RawChannel[*MapEntry[K, V]]) 15 go func() { 16 for k, v := range m { 17 ch <- &MapEntry[K, V]{k, v} 18 } 19 20 close(ch) 21 }() 22 23 return ch 24 } 25 26 func ArrayChannel[E any](arr lang.Array[E]) lang.ReceiveChannel[E] { 27 ch := make(lang.RawChannel[E]) 28 go func() { 29 for _, e := range arr { 30 ch <- e 31 } 32 33 close(ch) 34 }() 35 36 return ch 37 } 38 39 func SliceChannel[E any](arr []E) lang.ReceiveChannel[E] { 40 ch := make(lang.RawChannel[E]) 41 go func() { 42 for _, e := range arr { 43 ch <- e 44 } 45 46 close(ch) 47 }() 48 49 return ch 50 } 51 52 func IteratorChannel[E any](iter collections.Iterator[E]) lang.ReceiveChannel[E] { 53 ch := make(lang.RawChannel[E]) 54 go func() { 55 for iter.HasNext() { 56 next, e := iter.Next() 57 if e != nil { 58 panic(e) 59 } 60 61 ch <- next 62 } 63 64 close(ch) 65 }() 66 67 return ch 68 }