summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--generate.go6
-rw-r--r--generateSort.go15
2 files changed, 21 insertions, 0 deletions
diff --git a/generate.go b/generate.go
index 7ab5b07..2665c81 100644
--- a/generate.go
+++ b/generate.go
@@ -132,6 +132,12 @@ func (pb *Files) makeNewSortfile(pf *File) error {
BRAND := v.VarName
funcdef = pmsg.addIterBy(wSort, FRUITS, FRUIT, BRAND, SORTNAME)
log.Printf("Adding %s\n", funcdef)
+
+ funcname := "Sort" + v.VarName
+ STRUCT := PARENT
+ LOCK := s.Lockname
+ funcdef = pmsg.newSort(wSort, STRUCT, funcname, sortname, LOCK)
+ 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 bf72795..305896e 100644
--- a/generateSort.go
+++ b/generateSort.go
@@ -99,6 +99,7 @@ func (msg *MsgName) newSortType(w io.Writer, STRUCT, VARNAME string) string {
return "type " + STRUCT + VARNAME + " []*" + STRUCT + " // { return a[i]." + VARNAME + " < a[j]." + VARNAME + " }"
}
+// provdes a sorted iter. Does not modify the protobuf
func (msg *MsgName) newSortBy(w io.Writer, STRUCT, ITER, SORTNAME, SORTBY, SELECT, VARNAME string) string {
funcdef := "func (x *" + STRUCT + ") " + SORTBY + "() *" + ITER + "Scanner"
@@ -119,6 +120,20 @@ func (msg *MsgName) newSortBy(w io.Writer, STRUCT, ITER, SORTNAME, SORTBY, SELEC
return funcdef
}
+// sorts the protobuf in place.
+func (msg *MsgName) newSort(w io.Writer, STRUCT, FUNCNAME, SORTNAME, LOCK string) string {
+ funcdef := "func (pb *" + STRUCT + ") " + FUNCNAME + "() "
+
+ fmt.Fprintln(w, funcdef, "{")
+ fmt.Fprintln(w, " "+LOCK+".Lock()")
+ fmt.Fprintln(w, " defer "+LOCK+".Unlock()")
+ fmt.Fprintln(w, "")
+ fmt.Fprintln(w, " sort.Sort("+SORTNAME+"(pb."+STRUCT+"))")
+ fmt.Fprintln(w, "}")
+
+ return funcdef
+}
+
func (msg *MsgName) addIterAllFunc(w io.Writer, FRUIT, APPLE, APPLES string) string {
funcdef := "func (x *" + FRUIT + ") All() *" + APPLE + "Scanner {"