github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library@v0.2.0/SortedSets/externs.go (about)

     1  package SortedSets
     2  
     3  import (
     4  	"sort"
     5  
     6  	"github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
     7  )
     8  
     9  func SetToOrderedSequence(set dafny.Set, fn func(interface{}, interface{}) bool) dafny.Sequence {
    10  	var arr []interface{}
    11  	for i := set.Iterator(); ; {
    12  		val, notEndOfSequence := i()
    13  		if notEndOfSequence {
    14  			arr = append(arr, val)
    15  		} else {
    16  			sort.Slice(arr, func(i, j int) bool {
    17  				a := arr[i].(dafny.Sequence)
    18  				b := arr[j].(dafny.Sequence)
    19  				for ii, jj := dafny.Iterate(a), dafny.Iterate(b); ; {
    20  					v1, notEndOfSequence1 := ii()
    21  					v2, notEndOfSequence2 := jj()
    22  					if notEndOfSequence1 && notEndOfSequence2 {
    23  						if fn(v1, v2) {
    24  							return true
    25  						}
    26  						if fn(v2, v1) {
    27  							return false
    28  						}
    29  					} else if notEndOfSequence1 {
    30  						return false
    31  					} else if notEndOfSequence2 {
    32  						return true
    33  					} else {
    34  						return false
    35  					}
    36  				}
    37  			})
    38  			return dafny.SeqOf(arr...)
    39  		}
    40  	}
    41  }
    42  
    43  func SetToOrderedSequence2(set dafny.Set, fn func(interface{}, interface{}) bool) dafny.Sequence {
    44  	return SetToOrderedSequence(set, fn)
    45  }
    46  
    47  func SetToSequence(set dafny.Set) dafny.Sequence {
    48  	var arr []interface{}
    49  	for i := set.Iterator(); ; {
    50  		val, ok := i()
    51  		if ok {
    52  			arr = append(arr, val)
    53  		} else {
    54  			return dafny.SeqOf(arr...)
    55  		}
    56  	}
    57  
    58  }