summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/main.go b/main.go
index ef7878b..bcf733d 100644
--- a/main.go
+++ b/main.go
@@ -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
}
+*/