summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/main.go6
-rw-r--r--generate.go7
-rw-r--r--generateSort.go18
3 files changed, 27 insertions, 4 deletions
diff --git a/example/main.go b/example/main.go
index 490421e..fe1b4f0 100644
--- a/example/main.go
+++ b/example/main.go
@@ -119,11 +119,9 @@ func (pb *Fruits) printTable() {
func (pb *Fruits) sortTable(i int) {
var count int
- all := pb.SortByBrand()
- for all.Scan() {
- tmp := all.Next()
+ for fruit := range pb.IterByBrand() {
count += 1
- log.Printf("found %d %s %s\n", count, tmp.Brand, tmp.City)
+ log.Printf("found %d %s %s\n", count, fruit.Brand, fruit.City)
if count > i {
break
}
diff --git a/generate.go b/generate.go
index 8c53297..6c67ae8 100644
--- a/generate.go
+++ b/generate.go
@@ -125,6 +125,13 @@ func (pb *Files) makeNewSortfile(pf *File) error {
selectName := "selectAll" + VARNAME
funcdef := pmsg.newSortBy(wSort, PARENT, s.VarType, sortname, sortby, selectName, v.VarName)
log.Printf("Adding %s\n", funcdef)
+
+ FRUITS := PARENT
+ FRUIT := s.VarType
+ SORTNAME := sortname
+ BRAND := v.VarName
+ funcdef = pmsg.addIterBy(wSort, FRUITS, FRUIT, BRAND, SORTNAME)
+ log.Printf("Adding %s\n", funcdef)
} else {
// deprecate this THIS DOES NOT MAKE SENSE TO DO
sortby = "Sort" + VARNAME + "By" + v.VarName
diff --git a/generateSort.go b/generateSort.go
index 5ad2dc6..1fe09f7 100644
--- a/generateSort.go
+++ b/generateSort.go
@@ -116,6 +116,24 @@ func (msg *MsgName) newSortBy(w io.Writer, STRUCT, ITER, SORTNAME, SORTBY, SELEC
return funcdef
}
+func (msg *MsgName) addIterBy(w io.Writer, FRUITS, FRUIT, APPLE, SORTNAME string) string {
+ fmt.Fprintln(w, "// for range syntax using iter package")
+ fmt.Fprintln(w, "func (x *"+FRUITS+") IterBy"+APPLE+"() iter.Seq[*"+FRUIT+"] {")
+ fmt.Fprintln(w, " items := x.selectAll"+FRUITS+"()")
+ fmt.Fprintln(w, " sort.Sort("+SORTNAME+"(items))")
+ fmt.Fprintln(w, " log.Println(\"Made Iter.Seq[] with length\", len(items))")
+ fmt.Fprintln(w, " return func(yield func(*"+FRUIT+") bool) {")
+ fmt.Fprintln(w, " for _, v := range items {")
+ fmt.Fprintln(w, " if !yield(v) {")
+ fmt.Fprintln(w, " return")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, "}")
+
+ return ""
+}
+
func (msg *MsgName) addAllFunc(w io.Writer, FRUIT, APPLE, APPLES string) string {
funcdef := "func (x *" + FRUIT + ") All() *" + APPLE + "Iterator {"