diff options
Diffstat (limited to 'generateSort.go')
| -rw-r--r-- | generateSort.go | 80 |
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 } |
