From f3297022a8ed73db93842311d4b1429e8f69e8c7 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 10 Jan 2025 22:27:38 -0600 Subject: [PATCH] close to being able to remove the old functions --- main.go | 4 ++- sort.go | 104 +++++++++++++++++++++++++++++++++++++---------------- sortNew.go | 41 +++++++++++---------- 3 files changed, 97 insertions(+), 52 deletions(-) diff --git a/main.go b/main.go index eda308b..59d4ded 100644 --- a/main.go +++ b/main.go @@ -151,7 +151,9 @@ func main() { pb.marshal(pf) // make the sort.pb.go file - pb.makeNewSortfile(pf) + if err := pb.makeNewSortfile(pf); err != nil { + badExit(err) + } } func okExit(s string) { diff --git a/sort.go b/sort.go index f9763f7..e658ccf 100644 --- a/sort.go +++ b/sort.go @@ -48,25 +48,39 @@ func (pb *Files) makeNewSortfile(pf *File) error { */ // attempt to add sort functions for pf.Base - pf.processMessage(pf.Bases, wSort, wFind) - pf.processMessage(pf.Base, wSort, wFind) + if err := pf.processMessage(pf.Bases, wSort, wFind); err != nil { + return err + } + if err := pf.processMessage(pf.Base, wSort, wFind); err != nil { + return err + } return nil } +// to simplify being able to read the code, FRUIT, APPLES and APPLE are used +// FRUIT == the string name of the message in the protobuf file +// APPLE == the type of the repeated variable +// APPLES == the variable name of the repeated struct func (pf *File) processMessage(msg *MsgName, wSort, wFind io.Writer) error { var FRUIT string = cases.Title(language.English, cases.NoLower).String(msg.Name) + log.Printf("Generating functions for %s\n", FRUIT) + for _, v := range msg.Vars { if !v.IsRepeated { log.Printf("\tSKIP %s %s\n", v.VarName, v.VarType) continue } + log.Printf("\tFOUND REPEATED %s %s\n", v.VarName, v.VarType) // use easier to read variable names APPLE and APPLES in the code var APPLE string = v.VarType var APPLES string = cases.Title(language.English, cases.NoLower).String(v.VarName) // try and find the message struct for APPLE var found *MsgName + if pf.Base.Name == APPLE { + found = pf.Base + } for _, m := range pf.MsgNames { if m.Name == APPLE { found = m @@ -77,44 +91,74 @@ func (pf *File) processMessage(msg *MsgName, wSort, wFind io.Writer) error { return fmt.Errorf("failed to find struct %s", APPLE) } - found.addSortByMsg(FRUIT, APPLES, APPLE, wSort, wFind) + log.Printf("FOUND: %s %s for %s\n", APPLES, APPLE, FRUIT) + + found.simpleAppend(wFind, FRUIT, APPLES, APPLE) + found.addAppendByMsg(wFind, FRUIT, APPLES, APPLE) + found.addDeleteByMsg(wFind, FRUIT, APPLES, APPLE) + found.addInsertByMsg(wFind, FRUIT, APPLES, APPLE) // new idea + + found.addSortByMsg(wSort, FRUIT, APPLES, APPLE) } return nil } -func (parent *MsgName) addSortByMsg(FRUIT, APPLES, APPLE string, wSort, wFind io.Writer) error { - log.Printf("\tFOUND!: %s %s for %s\n", APPLES, APPLE, FRUIT) +func (parent *MsgName) addDeleteByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tDELETE: %s %s for %s\n", APPLES, APPLE, FRUIT) var COLORS []string + for _, v := range parent.Vars { + if !v.HasUnique { + continue + } + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) + COLORS = append(COLORS, COLOR) + + log.Printf("\t\t(x %s) DeleteBy%s(string) *%s\n", FRUIT, COLOR, APPLE) + if argv.Delete { + parent.deleteByWithCopy(w, FRUIT, APPLES, APPLE, COLOR) + } else { + parent.deleteBy(w, FRUIT, APPLES, APPLE, COLOR) + } + } +} + +func (parent *MsgName) addInsertByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tINSERT: %s %s for %s\n", APPLES, APPLE, FRUIT) + for _, v := range parent.Vars { + if v.HasUnique { + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) + log.Printf("\t\t(x %s) InsertBy%s(string) *%s\n", FRUIT, COLOR, APPLE) + parent.insertByColor(w, FRUIT, APPLES, APPLE, COLOR) + } + } +} + +func (parent *MsgName) addAppendByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tAPPEND!: %s %s for %s\n", APPLES, APPLE, FRUIT) + var COLORS []string + + for _, v := range parent.Vars { + if v.HasUnique { + var COLOR string = cases.Title(language.English, cases.NoLower).String(v.VarName) + COLORS = append(COLORS, COLOR) + + log.Printf("\t\t(x %s) AppendUniqueBy%s(%s)\n", FRUIT, COLOR, APPLE) + parent.appendUniqueBy(w, FRUIT, APPLES, APPLE, COLOR) + } + } + if len(COLORS) > 0 { + parent.appendUnique(w, FRUIT, APPLES, APPLE, COLORS) + } +} + +func (parent *MsgName) addSortByMsg(w io.Writer, FRUIT, APPLES, APPLE string) { + log.Printf("\tSORT!: %s %s for %s\n", APPLES, APPLE, FRUIT) for _, v := range parent.Vars { if v.HasSort { // log.Printf("\tSort!: %s %s for %s\n", APPLES, APPLE, v.VarName) newS := cases.Title(language.English, cases.NoLower).String(v.VarName) - log.Printf("\t(x %s) SortdBy%s() *%sIter\n", parent.Name, newS, APPLE) - } - if v.HasUnique { - newS := cases.Title(language.English, cases.NoLower).String(v.VarName) - var COLOR string = newS - COLORS = append(COLORS, COLOR) - - log.Printf("\t(x %s) AppendUniqueBy%s(%s)\n", parent.Name, newS, APPLE) - parent.appendUniqueBy(wFind, FRUIT, APPLES, APPLE, COLOR) - - if v.VarType == "string" { - log.Printf("\t(x %s) FindBy%s(string) *%s\n", FRUIT, COLOR, APPLE) - parent.findBy(wFind, FRUIT, APPLES, APPLE, COLOR) - log.Printf("\t(x %s) DeleteBy%s(string) *%s\n", parent.Name, newS, APPLE) - if argv.Delete { - parent.deleteByWithCopy(wFind, FRUIT, APPLES, APPLE, COLOR) - } else { - parent.deleteBy(wFind, FRUIT, APPLES, APPLE, COLOR) - } - } + log.Printf("\t\t(x %s) SortdBy%s() *%sIter\n", FRUIT, newS, APPLE) } } - parent.insertByColors(wFind, FRUIT, APPLES, APPLE, COLORS) - if len(COLORS) > 0 { - parent.appendUnique(wFind, FRUIT, APPLES, APPLE, COLORS) - } - return nil } diff --git a/sortNew.go b/sortNew.go index 7ed81dd..9f6a829 100644 --- a/sortNew.go +++ b/sortNew.go @@ -30,28 +30,27 @@ func (msg *MsgName) simpleAppend(w io.Writer, FRUIT, APPLES, APPLE string) { fmt.Fprintln(w, "") } -func (msg *MsgName) insertByColors(w io.Writer, FRUIT, APPLES, APPLE string, COLORS []string) { +func (msg *MsgName) insertByColor(w io.Writer, FRUIT, APPLES, APPLE string, COLOR string) { LOCK := msg.getLockname("x") - for _, COLOR := range COLORS { - fmt.Fprintln(w, "// TESTING") - fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") - fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) "+APPLE+" {") - fmt.Fprintln(w, " "+LOCK+".Lock()") - fmt.Fprintln(w, " defer "+LOCK+".Unlock()") - fmt.Fprintln(w, "") - fmt.Fprintln(w, " for _, p := range x."+APPLES+" {") - fmt.Fprintln(w, " if p."+COLOR+" == "+COLOR+" {") - fmt.Fprintln(w, " return p") - fmt.Fprintln(w, " }") - fmt.Fprintln(w, " }") - fmt.Fprintln(w, "") - fmt.Fprintln(w, " z := new("+APPLE+")") - fmt.Fprintln(w, " z."+COLOR+" := y") - fmt.Fprintln(w, " x."+APPLES+" = append(x."+APPLES+", z)") - fmt.Fprintln(w, " return true") - fmt.Fprintln(w, "}") - fmt.Fprintln(w, "") - } + + fmt.Fprintln(w, "// TESTING") + fmt.Fprintln(w, "// returns an "+APPLE+" if "+COLOR+" matches, otherwise create") + fmt.Fprintln(w, "func (x *"+FRUIT+") InsertBy"+COLOR+" (y string) *"+APPLE+" {") + fmt.Fprintln(w, " "+LOCK+".Lock()") + fmt.Fprintln(w, " defer "+LOCK+".Unlock()") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " for _, p := range x."+APPLES+" {") + fmt.Fprintln(w, " if p."+COLOR+" == y {") + fmt.Fprintln(w, " return p") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, " }") + fmt.Fprintln(w, "") + fmt.Fprintln(w, " z := new("+APPLE+")") + fmt.Fprintln(w, " z."+COLOR+" = y") + fmt.Fprintln(w, " x."+APPLES+" = append(x."+APPLES+", z)") + fmt.Fprintln(w, " return z") + fmt.Fprintln(w, "}") + fmt.Fprintln(w, "") } func (msg *MsgName) appendUnique(w io.Writer, FRUIT, APPLES, APPLE string, COLORS []string) {