maybe got it finally
This commit is contained in:
parent
12fb2c9f09
commit
bb8e2290e0
33
generate.go
33
generate.go
|
@ -20,12 +20,14 @@ func (pb *Files) makeNewSortfile(pf *File) error {
|
|||
|
||||
header(wSort, pf)
|
||||
|
||||
pf.Base.iterTop(wSort)
|
||||
pf.Base.iterNext(wSort)
|
||||
pf.selectAllFunc(wSort)
|
||||
pf.iterSelect(wSort)
|
||||
// pf.Base.iterTop(wSort)
|
||||
// pf.Base.iterNext(wSort)
|
||||
// pf.selectAllFunc(wSort)
|
||||
// pf.iterSelect(wSort)
|
||||
|
||||
pf.sortByFunc(wSort, pf.Bases, pf.Base)
|
||||
// pf.sortByFunc(wSort, pf.Bases, pf.Base)
|
||||
pf.newGenerateSort(wSort, pf.Bases)
|
||||
pf.newGenerateSort(wSort, pf.Base)
|
||||
|
||||
/*
|
||||
pf.appendUnique(wFind) // Append() enforce no unique keys
|
||||
|
@ -55,24 +57,35 @@ func (pf *File) newGenerateSort(w io.Writer, parent *MsgName) error {
|
|||
var FRUIT string = parent.Name
|
||||
var LOCK string = parent.Lockname
|
||||
|
||||
var allLen bool
|
||||
|
||||
for _, v := range parent.Vars {
|
||||
if v.IsRepeated {
|
||||
if !v.IsRepeated {
|
||||
continue
|
||||
}
|
||||
var APPLES string = v.VarName
|
||||
var APPLE string = v.VarType
|
||||
if !allLen {
|
||||
// only can run these once for now
|
||||
addAllFunc(w, FRUIT, APPLE, LOCK)
|
||||
addLenFunc(w, FRUIT, APPLES, LOCK)
|
||||
allLen = true
|
||||
}
|
||||
addSelectAll(w, FRUIT, APPLE, APPLES, LOCK)
|
||||
newIter(w, FRUIT, APPLE, APPLES, LOCK)
|
||||
msg := pf.findMsg(APPLE)
|
||||
if msg == nil {
|
||||
return fmt.Errorf("failed to find struct %s", APPLE)
|
||||
}
|
||||
for _, v := range msg.Vars {
|
||||
if v.HasSort {
|
||||
if !v.HasSort {
|
||||
continue
|
||||
}
|
||||
var COLOR string = v.VarName
|
||||
newSortBy(w, FRUIT, APPLE, COLOR)
|
||||
newSortBy(w, FRUIT, APPLE, APPLES, COLOR)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ func newIter(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
|
|||
fmt.Fprintln(w, "}")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, "// safely returns a slice of pointers to the FRUIT protobufs")
|
||||
fmt.Fprintln(w, "func (x *"+FRUIT+") all() []*"+APPLE+" {")
|
||||
fmt.Fprintln(w, "func (x *"+FRUIT+") all"+APPLES+"() []*"+APPLE+" {")
|
||||
fmt.Fprintln(w, " "+LOCK+".RLock()")
|
||||
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
|
||||
fmt.Fprintln(w, "")
|
||||
|
@ -55,7 +55,7 @@ func newIter(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
|
|||
fmt.Fprintln(w, "")
|
||||
}
|
||||
|
||||
func newSortBy(w io.Writer, FRUIT, APPLE, COLOR string) {
|
||||
func newSortBy(w io.Writer, FRUIT, APPLE, APPLES, COLOR string) {
|
||||
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, "")
|
||||
|
@ -64,7 +64,7 @@ func newSortBy(w io.Writer, FRUIT, APPLE, COLOR string) {
|
|||
fmt.Fprintln(w, "func (a "+APPLE+COLOR+") Swap(i, j int) { a[i], a[j] = a[j], a[i] }")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, "func (x *"+FRUIT+") SortBy"+COLOR+"() *"+APPLE+"Iterator {")
|
||||
fmt.Fprintln(w, " things := x.all()")
|
||||
fmt.Fprintln(w, " things := x.all"+APPLES+"()")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, " sort.Sort("+APPLE+COLOR+"(things))")
|
||||
fmt.Fprintln(w, "")
|
||||
|
@ -73,3 +73,41 @@ func newSortBy(w io.Writer, FRUIT, APPLE, COLOR string) {
|
|||
fmt.Fprintln(w, "}")
|
||||
fmt.Fprintln(w, "// END sort by", COLOR)
|
||||
}
|
||||
|
||||
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+"()")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, " iterator := New"+APPLE+"Iterator("+APPLE+"Pointers)")
|
||||
fmt.Fprintln(w, " return iterator")
|
||||
fmt.Fprintln(w, "}")
|
||||
fmt.Fprintln(w, "")
|
||||
}
|
||||
|
||||
func addLenFunc(w io.Writer, FRUIT, APPLES, LOCK string) {
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, "func (x *"+FRUIT+") Len() int {")
|
||||
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, "")
|
||||
}
|
||||
|
||||
func addSelectAll(w io.Writer, FRUIT, APPLE, APPLES, LOCK string) {
|
||||
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, " "+LOCK+".RLock()")
|
||||
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, " // Create a new slice to hold pointers to each "+APPLE+"")
|
||||
fmt.Fprintln(w, " var tmp []*"+APPLE+"")
|
||||
fmt.Fprintln(w, " tmp = make([]*"+APPLE+", len(x."+APPLES+"))")
|
||||
fmt.Fprintln(w, " for i, p := range x."+APPLES+" {")
|
||||
fmt.Fprintln(w, " tmp[i] = p // Copy pointers for safe iteration")
|
||||
fmt.Fprintln(w, " }")
|
||||
fmt.Fprintln(w, "")
|
||||
fmt.Fprintln(w, " return tmp")
|
||||
fmt.Fprintln(w, "}")
|
||||
}
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
/*
|
||||
func (msg *MsgName) iterTop(w io.Writer) {
|
||||
var BASE string = msg.Name
|
||||
|
||||
|
@ -117,3 +113,4 @@ func (pf *File) iterSelect(w io.Writer) {
|
|||
fmt.Fprintln(w, " return tmp")
|
||||
fmt.Fprintln(w, "}")
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -135,11 +135,11 @@ func parseMsgVar(line string) *MsgVar {
|
|||
if parts[0] == "repeated" {
|
||||
v.IsRepeated = true
|
||||
v.VarType = parts[1]
|
||||
v.VarName = parts[2]
|
||||
v.VarName = cases.Title(language.English, cases.NoLower).String(parts[2])
|
||||
return v
|
||||
}
|
||||
v.VarType = parts[0]
|
||||
v.VarName = parts[1]
|
||||
v.VarName = cases.Title(language.English, cases.NoLower).String(parts[1])
|
||||
return v
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue