github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/list_sort_int.go (about)

     1  package funcs
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/nevalang/neva/internal/runtime"
     7  	"golang.org/x/exp/slices"
     8  )
     9  
    10  type listSortInt struct{}
    11  
    12  func (p listSortInt) Create(io runtime.FuncIO, _ runtime.Msg) (func(ctx context.Context), error) {
    13  	dataIn, err := io.In.Port("data")
    14  	if err != nil {
    15  		return nil, err
    16  	}
    17  
    18  	resOut, err := io.Out.Port("res")
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  
    23  	return func(ctx context.Context) {
    24  		var data runtime.Msg
    25  
    26  		for {
    27  			select {
    28  			case <-ctx.Done():
    29  				return
    30  			case data = <-dataIn:
    31  			}
    32  
    33  			clone := slices.Clone(data.List())
    34  			slices.SortFunc(clone, func(i, j runtime.Msg) bool {
    35  				return i.Int() < j.Int()
    36  			})
    37  
    38  			select {
    39  			case <-ctx.Done():
    40  				return
    41  			case resOut <- runtime.NewListMsg(clone...):
    42  			}
    43  		}
    44  	}, nil
    45  }