diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -11,6 +11,7 @@ func main() { header(f, "testautogen") syncLock(f, "gitTagslock") iterTop(f, "GitTag") + iterNext(f, "GitTag") } func header(w io.Writer, name string) { @@ -48,6 +49,12 @@ func iterTop(w io.Writer, name string) { fmt.Fprintln(w, "}") fmt.Fprintln(w, "") fmt.Fprintln(w, "// Scan moves to the next element and returns false if there are no more packs.") + fmt.Fprintln(w, "// Use Scan() in a loop, similar to a while loop") + fmt.Fprintln(w, "//") + fmt.Fprintln(w, "// for iterator.Scan() ") + fmt.Fprintln(w, "// d := iterator.Next(") + fmt.Fprintln(w, "// fmt.Println(\"found UUID:\", d.Uuid") + fmt.Fprintln(w, "// }") fmt.Fprintln(w, "func (it *"+name+"Iterator) Scan() bool {") fmt.Fprintln(w, " if it.index >= len(it.packs) {") fmt.Fprintln(w, " return false") @@ -55,4 +62,68 @@ func iterTop(w io.Writer, name string) { fmt.Fprintln(w, " it.index++") fmt.Fprintln(w, " return true") fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") +} + +func iterNext(w io.Writer, name string) { + fmt.Fprintln(w, "// Next() returns the next thing in the array") + fmt.Fprintln(w, "func (it *" + name + "Iterator) Next() *" + name + " {") + fmt.Fprintln(w, " if it.packs[it.index-1] == nil {") + fmt.Fprintln(w, " for i, d := range it.packs {") + fmt.Fprintln(w, " fmt.Println(\"i =\", i, d)") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " fmt.Println(\"protobuf autogenpb sort error len =\", len(it.packs))") + fmt.Fprintln(w, " fmt.Println(\"protobuf autogenpb sort error next == nil\", it.index, it.index-1)") + fmt.Fprintln(w, " os.Exit(-1)") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " return it.packs[it.index-1]") + fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") +} + +/* + +func (r *Repos) All() *RepoIterator { + repoPointers := r.selectAllRepo() + + iterator := NewRepoIterator(repoPointers) + return iterator +} + +func (r *Repos) SortByPath() *RepoIterator { + packs := r.selectAllRepo() + + sort.Sort(RepoByPath(packs)) + + iterator := NewRepoIterator(packs) + return iterator +} + +func (all *Repos) Len() int { + repolock.RLock() + defer repolock.RUnlock() + + return len(all.Repos) +} + +type RepoByPath []*Repo + +func (a RepoByPath) Len() int { return len(a) } +func (a RepoByPath) Less(i, j int) bool { return a[i].GoPath < a[j].GoPath } +func (a RepoByPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +// safely returns a slice of pointers to the Repo protobufs +func (all *Repos) selectAllRepo() []*Repo { + repolock.RLock() + defer repolock.RUnlock() + + // Create a new slice to hold pointers to each Repo + var aRepos []*Repo + aRepos = make([]*Repo, len(all.Repos)) + for i, p := range all.Repos { + aRepos[i] = p // Copy pointers for safe iteration + } + + return aRepos } +*/ |
