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 }