// Code generated by go.wit.com/apps/autogenpb DO NOT EDIT. // This file was autogenerated with autogenpb v0.0.40-19-gfed674d 2025.01.11_0448 // go install go.wit.com/apps/autogenpb@latest // // define which structs (messages) you want to use in the .proto file // Then sort.pb.go and marshal.pb.go files are autogenerated // // autogenpb uses it and has an example .proto file with instructions // package forgepb import ( "fmt" "sort" "sync" ) // DEFINE THE ITERATOR. Only one per Patch message // NewPatchsetIterator initializes a new iterator. func NewPatchIterator(things []*Patch) *PatchIterator { return &PatchIterator{things: things} } // safely returns a slice of pointers to the Patchset protobufs func (x *Patchset) all() []*Patch { x.Lock.RLock() defer x.Lock.RUnlock() // Create a new slice to hold pointers to each Patchset var tmp []*Patch tmp = make([]*Patch, len(x.Patches)) for i, p := range x.Patches { tmp[i] = p // Copy pointers for safe iteration } return tmp } type PatchIterator struct { sync.RWMutex things []*Patch index int } func (it *PatchIterator) Scan() bool { if it.index >= len(it.things) { return false } it.index++ return true } // Next() returns the next thing in the array func (it *PatchIterator) Next() *Patch { if it.things[it.index-1] == nil { fmt.Println("Next() error in PatchIterator", it.index) } return it.things[it.index-1] } // END DEFINE THE ITERATOR // START sort by Filename (this is all you need once the Iterator is defined) type PatchFilename []*Patch func (a PatchFilename) Len() int { return len(a) } func (a PatchFilename) Less(i, j int) bool { return a[i].Filename < a[j].Filename } func (a PatchFilename) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (x *Patchset) SortByFilename() *PatchIterator { things := x.all() sort.Sort(PatchFilename(things)) iterator := NewPatchIterator(things) return iterator } // END sort by Filename