add InsertBy() functions

This commit is contained in:
Jeff Carr 2025-03-09 09:30:17 -05:00
parent 7f03282aca
commit 4f881d17c0
3 changed files with 68 additions and 37 deletions

View File

@ -240,7 +240,7 @@ func (pb *Files) makeNewSortfile(pf *File) error {
// find() // find()
for _, v := range msg.Vars { for _, v := range msg.Vars {
if v.VarType != "string" { if !(v.VarType == "string" || (v.VarType == "int64")) {
continue continue
} }
if v.IsRepeated { if v.IsRepeated {
@ -254,13 +254,15 @@ func (pb *Files) makeNewSortfile(pf *File) error {
// special case because of the enforced .proto format // special case because of the enforced .proto format
FUNCNAME = "FindBy" + v.VarName FUNCNAME = "FindBy" + v.VarName
funcdef := pmsg.generateFindBy(wSort, FUNCNAME, PARENT, s, v) funcdef := pmsg.generateFindBy(wSort, FUNCNAME, PARENT, s, v)
// func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT, VARNAME, VARTYPE, COLOR string) string {
log.Printf("Adding %s\n", funcdef) log.Printf("Adding %s\n", funcdef)
} else {
// deprecate these
FUNCNAME = "Find" + VARNAME + "By" + v.VarName
}
FRUITS := PARENT
FRUIT := s.VarType
APPLE := v.VarName
COLOR := v.VarType
funcdef = pmsg.insertBy(wSort, FRUITS, FRUIT, APPLE, COLOR)
log.Printf("Adding %s\n", funcdef)
}
} else { } else {
if v.VarType == "string" { if v.VarType == "string" {
// probably dumb. move to a database if you need this // probably dumb. move to a database if you need this

View File

@ -12,31 +12,55 @@ import (
func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT string, sortvals *Sort, childVar *MsgVar) string { func (msg *MsgName) generateFindBy(w io.Writer, FUNCNAME, STRUCT string, sortvals *Sort, childVar *MsgVar) string {
LOCK := msg.getLockname("x") LOCK := msg.getLockname("x")
if childVar.VarType != "string" {
return ""
}
VARNAME := sortvals.VarName VARNAME := sortvals.VarName
VARTYPE := sortvals.VarType VARTYPE := sortvals.VarType
COLOR := childVar.VarName COLOR := childVar.VarName
funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(s string) *" + VARTYPE
fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR) if childVar.VarType == "string" {
fmt.Fprintln(w, funcdef, "{") funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(s string) *" + VARTYPE
fmt.Fprintln(w, " if x == nil {")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {")
fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == s {")
fmt.Fprintln(w, " return x."+VARNAME+"[i]")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
return funcdef fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR)
fmt.Fprintln(w, funcdef, "{")
fmt.Fprintln(w, " if x == nil {")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {")
fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == s {")
fmt.Fprintln(w, " return x."+VARNAME+"[i]")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
return funcdef
}
if childVar.VarType == "int64" {
funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(y int64) *" + VARTYPE
fmt.Fprintln(w, "// lookup a", STRUCT, "by the ", COLOR)
fmt.Fprintln(w, funcdef, "{")
fmt.Fprintln(w, " if x == nil {")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " "+LOCK+".RLock()")
fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " for i, _ := range x."+VARNAME+" {")
fmt.Fprintln(w, " if x."+VARNAME+"[i]."+COLOR+" == y {")
fmt.Fprintln(w, " return x."+VARNAME+"[i]")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " return nil")
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
return funcdef
}
return ""
} }

View File

@ -9,24 +9,29 @@ import (
) )
// new idea. useful? TODO: look at this again in 1y // new idea. useful? TODO: look at this again in 1y
func (msg *MsgName) insertBy(w io.Writer, FRUIT, APPLES, APPLE string, COLOR string) { // Mar 2025. yes. this is useful
func (msg *MsgName) insertBy(w io.Writer, FRUITS, FRUIT, APPLE string, COLOR string) string {
LOCK := msg.getLockname("x") LOCK := msg.getLockname("x")
fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") funcdef := "func (x *" + FRUITS + ") InsertBy" + APPLE + " (y " + COLOR + ") *" + FRUIT + " {"
fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) *"+APPLE+" {")
fmt.Fprintln(w, "// returns a "+FRUIT+" if "+APPLE+" matches, otherwise create")
fmt.Fprintln(w, funcdef)
fmt.Fprintln(w, " "+LOCK+".Lock()") fmt.Fprintln(w, " "+LOCK+".Lock()")
fmt.Fprintln(w, " defer "+LOCK+".Unlock()") fmt.Fprintln(w, " defer "+LOCK+".Unlock()")
fmt.Fprintln(w, "") fmt.Fprintln(w, "")
fmt.Fprintln(w, " for _, p := range x."+APPLES+" {") fmt.Fprintln(w, " for _, z := range x."+FRUITS+" {")
fmt.Fprintln(w, " if p."+COLOR+" == y {") fmt.Fprintln(w, " if z."+APPLE+" == y {")
fmt.Fprintln(w, " return p") fmt.Fprintln(w, " return z")
fmt.Fprintln(w, " }") fmt.Fprintln(w, " }")
fmt.Fprintln(w, " }") fmt.Fprintln(w, " }")
fmt.Fprintln(w, "") fmt.Fprintln(w, "")
fmt.Fprintln(w, " z := new("+APPLE+")") fmt.Fprintln(w, " z := new("+FRUIT+")")
fmt.Fprintln(w, " z."+COLOR+" = y") fmt.Fprintln(w, " z."+APPLE+" = y")
fmt.Fprintln(w, " x."+APPLES+" = append(x."+APPLES+", z)") fmt.Fprintln(w, " x."+FRUITS+" = append(x."+FRUITS+", z)")
fmt.Fprintln(w, " return z") fmt.Fprintln(w, " return z")
fmt.Fprintln(w, "}") fmt.Fprintln(w, "}")
fmt.Fprintln(w, "") fmt.Fprintln(w, "")
return funcdef
} }