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  }