summaryrefslogtreecommitdiff
path: root/generateSort.go
diff options
context:
space:
mode:
Diffstat (limited to 'generateSort.go')
-rw-r--r--generateSort.go80
1 files changed, 63 insertions, 17 deletions
diff --git a/generateSort.go b/generateSort.go
index a710212..fd2291d 100644
--- a/generateSort.go
+++ b/generateSort.go
@@ -5,16 +5,11 @@ import (
"io"
)
-// only make one of these for each message in the protobuf file
-func newIter(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
- fmt.Fprintln(w, "// DEFINE THE ITERATOR. is unique to the "+APPLE+" protobuf message")
- fmt.Fprintln(w, "// itializes a new iterator.")
- fmt.Fprintln(w, "func New"+APPLE+"Iterator(things []*"+APPLE+") *"+APPLE+"Iterator {")
- fmt.Fprintln(w, " return &"+APPLE+"Iterator{things: things}")
- fmt.Fprintln(w, "}")
- fmt.Fprintln(w, "")
+func newIterAll(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) string {
+ funcdef := "func (x *" + FRUIT + ") all" + APPLES + "() []*" + APPLE + " {"
+
fmt.Fprintln(w, "// safely returns a slice of pointers to the FRUIT protobufs")
- fmt.Fprintln(w, "func (x *"+FRUIT+") all"+APPLES+"() []*"+APPLE+" {")
+ fmt.Fprintln(w, funcdef)
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
@@ -28,6 +23,26 @@ func newIter(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
fmt.Fprintln(w, " return tmp")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
+
+ return funcdef
+}
+
+// only make one of these for each message in the protobuf file
+func newIter(w io.Writer, msg *MsgName) string {
+ if !msg.NeedIter {
+ return "iter already done for " + msg.Name
+ }
+ msg.NeedIter = false
+ APPLE := msg.Name
+
+ funcdef := "func New" + APPLE + "Iterator(things []*" + APPLE + ") *" + APPLE + "Iterator"
+
+ fmt.Fprintln(w, "// DEFINE THE", APPLE, "ITERATOR.")
+ fmt.Fprintln(w, "// itializes a new iterator.")
+ fmt.Fprintln(w, funcdef, "{")
+ fmt.Fprintln(w, " return &"+APPLE+"Iterator{things: things}")
+ fmt.Fprintln(w, "}")
+ fmt.Fprintln(w, "")
fmt.Fprintln(w, "type "+APPLE+"Iterator struct {")
fmt.Fprintln(w, " sync.RWMutex // this isn't getting used properly yet?")
fmt.Fprintln(w, "")
@@ -53,9 +68,28 @@ func newIter(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
fmt.Fprintln(w, "")
fmt.Fprintln(w, "// END DEFINE THE ITERATOR")
fmt.Fprintln(w, "")
+
+ return funcdef
+}
+
+// maybe there are better ways in GO now adays // that's fine though. this is easy to read
+// TODO; figure out what types this actually works on
+// TODO; add timestamppb compare
+func newSortType(w io.Writer, STRUCT, VARNAME string) string {
+ fmt.Fprintln(w, "// sort struct by", VARNAME)
+ fmt.Fprintln(w, "type "+STRUCT+VARNAME+" []*"+STRUCT+"")
+ fmt.Fprintln(w, "")
+ fmt.Fprintln(w, "func (a "+STRUCT+VARNAME+") Len() int { return len(a) }")
+ fmt.Fprintln(w, "func (a "+STRUCT+VARNAME+") Less(i, j int) bool { return a[i]."+VARNAME+" < a[j]."+VARNAME+" }")
+ fmt.Fprintln(w, "func (a "+STRUCT+VARNAME+") Swap(i, j int) { a[i], a[j] = a[j], a[i] }")
+ fmt.Fprintln(w, "")
+
+ return "type " + STRUCT + VARNAME + " []*" + STRUCT + " // { return a[i]." + VARNAME + " < a[j]." + VARNAME + " }"
}
-func newSortBy(w io.Writer, FRUIT, APPLE, APPLES, COLOR string) {
+func newSortBy(w io.Writer, FRUIT, APPLE, APPLES, COLOR string) string {
+ funcdef := "func (x *" + FRUIT + ") SortBy" + COLOR + "() *" + APPLE + "Iterator // field: " + COLOR
+
fmt.Fprintln(w, "// START sort by ", COLOR, "(this is all you need once the Iterator is defined)")
fmt.Fprintln(w, "type "+APPLE+COLOR+" []*"+APPLE+"")
fmt.Fprintln(w, "")
@@ -72,32 +106,42 @@ func newSortBy(w io.Writer, FRUIT, APPLE, APPLES, COLOR string) {
fmt.Fprintln(w, " return iterator")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "// END sort by", COLOR)
+
+ return funcdef
}
-func addAllFunc(w io.Writer, FRUIT, APPLE, LOCK string) {
- fmt.Fprintln(w, "func (x *"+FRUIT+") All() *"+APPLE+"Iterator {")
- fmt.Fprintln(w, " "+APPLE+"Pointers := x.selectAll"+APPLE+"()")
+func addAllFunc(w io.Writer, FRUIT, APPLE, APPLES string) string {
+ funcdef := "func (x *" + FRUIT + ") All() *" + APPLE + "Iterator {"
+
+ fmt.Fprintln(w, funcdef)
+ fmt.Fprintln(w, " "+APPLE+"Pointers := x.selectAll"+APPLES+"()")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " iterator := New"+APPLE+"Iterator("+APPLE+"Pointers)")
fmt.Fprintln(w, " return iterator")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
+
+ return funcdef
}
-func addLenFunc(w io.Writer, FRUIT, APPLES, LOCK string) {
+func addLenFunc(w io.Writer, FRUIT, APPLES, LOCK string) string {
+ funcdef := "func (x *" + FRUIT + ") Len() int {"
fmt.Fprintln(w, "")
- fmt.Fprintln(w, "func (x *"+FRUIT+") Len() int {")
+ fmt.Fprintln(w, funcdef)
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " return len(x."+APPLES+")")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
+
+ return funcdef
}
-func addSelectAll(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
+func addSelectAll(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) string {
+ funcdef := "func (x *" + FRUIT + ") selectAll" + APPLES + "() []*" + APPLE
fmt.Fprintln(w, "// safely returns a slice of pointers to the "+APPLE+" protobufs")
- fmt.Fprintln(w, "func (x *"+FRUIT+") selectAll"+APPLE+"() []*"+APPLE+" {")
+ fmt.Fprintln(w, funcdef, "{")
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
@@ -110,4 +154,6 @@ func addSelectAll(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
fmt.Fprintln(w, "")
fmt.Fprintln(w, " return tmp")
fmt.Fprintln(w, "}")
+
+ return funcdef
}