almost have Delete()
This commit is contained in:
parent
c956babe1b
commit
fb8e44d36c
182
generate.go
182
generate.go
|
@ -187,6 +187,34 @@ func (pb *Files) makeNewSortfile(pf *File) error {
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make delete()
|
||||||
|
/*
|
||||||
|
for _, msg := range pf.allMsg() {
|
||||||
|
PARENT := msg.Name
|
||||||
|
|
||||||
|
for _, v := range msg.Vars {
|
||||||
|
if !v.HasUnique {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
funcname := "func (x *" + PARENT + ") Delete" + msg.Name + "By" + v.VarName + "(" + v.VarType + ") bool"
|
||||||
|
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
|
||||||
|
FRUIT := PARENT
|
||||||
|
APPLES := msg.Name
|
||||||
|
APPLE := v.VarName
|
||||||
|
COLOR := v.VarType
|
||||||
|
FUNCNAME := "Delete" + msg.Name + "By" + v.VarName
|
||||||
|
|
||||||
|
var funcdef string
|
||||||
|
if argv.Delete {
|
||||||
|
funcdef = msg.deleteByWithCopy(wSort, FRUIT, APPLES, APPLE, COLOR, FUNCNAME)
|
||||||
|
} else {
|
||||||
|
funcdef = msg.deleteBy(wSort, FRUIT, APPLES, APPLE, COLOR, FUNCNAME)
|
||||||
|
}
|
||||||
|
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "done", "", funcdef)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// add Find() Delete() Append() Insert()
|
// add Find() Delete() Append() Insert()
|
||||||
log.Printf(" %-2s %20s %20s %20s %20s\n", "", "PARENT STRUCT", "VAR STRUCT TYPE", "VAR NAME", "LOCK")
|
log.Printf(" %-2s %20s %20s %20s %20s\n", "", "PARENT STRUCT", "VAR STRUCT TYPE", "VAR NAME", "LOCK")
|
||||||
for i, s := range pf.ToSort {
|
for i, s := range pf.ToSort {
|
||||||
|
@ -204,19 +232,43 @@ func (pb *Files) makeNewSortfile(pf *File) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
var ucount int
|
var ucount int
|
||||||
|
// append() functions
|
||||||
for _, v := range msg.Vars {
|
for _, v := range msg.Vars {
|
||||||
if v.HasUnique {
|
if v.IsRepeated {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !v.HasUnique {
|
||||||
|
continue
|
||||||
|
}
|
||||||
ucount += 1
|
ucount += 1
|
||||||
funcname := "func (x *" + PARENT + ") Append" + VARNAME + "By" + v.VarName + "(" + v.VarType + ")"
|
// funcname := "func (x *" + PARENT + ") Append" + VARNAME + "By" + v.VarName + "(" + v.VarType + ")"
|
||||||
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
|
// log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
|
||||||
}
|
// func (msg *MsgName) addAppendBy(w io.Writer, STRUCT, FUNCNAME, VARNAME, CHILD, COLOR string) string {
|
||||||
|
// func (msg *MsgName) addAppendBy(w io.Writer, STRUCT, FUNCNAME, STRUCTVAR, VARNAME, VARTYPE string) string {
|
||||||
|
FUNCNAME := "Append" + VARNAME + "By" + v.VarName
|
||||||
|
funcdef := msg.addAppendBy(wSort, PARENT, FUNCNAME, VARNAME, v.VarName, s.VarType)
|
||||||
|
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "done", "", funcdef)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// delete() functions
|
||||||
for _, v := range msg.Vars {
|
for _, v := range msg.Vars {
|
||||||
if v.HasUnique {
|
if !v.HasUnique {
|
||||||
|
continue
|
||||||
|
}
|
||||||
funcname := "func (x *" + PARENT + ") Delete" + VARNAME + "By" + v.VarName + "(" + v.VarType + ") bool"
|
funcname := "func (x *" + PARENT + ") Delete" + VARNAME + "By" + v.VarName + "(" + v.VarType + ") bool"
|
||||||
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
|
log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname)
|
||||||
|
FRUIT := PARENT
|
||||||
|
APPLES := VARNAME
|
||||||
|
APPLE := v.VarName
|
||||||
|
COLOR := s.VarType
|
||||||
|
if argv.Delete {
|
||||||
|
msg.deleteByWithCopy(wSort, FRUIT, APPLES, APPLE, COLOR)
|
||||||
|
} else {
|
||||||
|
msg.deleteBy(wSort, FRUIT, APPLES, APPLE, COLOR)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
for _, v := range msg.Vars {
|
for _, v := range msg.Vars {
|
||||||
if v.HasUnique {
|
if v.HasUnique {
|
||||||
|
@ -244,124 +296,9 @@ func (pb *Files) makeNewSortfile(pf *File) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// everything struct used in here needs a sort iterator (but just one)
|
|
||||||
for FRUIT, APPLE := range pf.IterMap {
|
|
||||||
msg := pf.findMsg(FRUIT)
|
|
||||||
if msg == nil {
|
|
||||||
return fmt.Errorf("failed to find struct %s", FRUIT)
|
|
||||||
}
|
|
||||||
log.Printf("Add newIter() message %s\n", FRUIT)
|
|
||||||
newIter(wSort, msg)
|
|
||||||
|
|
||||||
child := pf.findMsg(APPLE)
|
|
||||||
if child == nil {
|
|
||||||
return fmt.Errorf("failed to find struct %s", APPLE)
|
|
||||||
}
|
|
||||||
log.Printf("Add newIter() message %s\n", APPLE)
|
|
||||||
newIter(wSort, child)
|
|
||||||
|
|
||||||
// now add the allKEY() functions
|
|
||||||
msg.newIterAll(wSort, FRUIT, APPLE)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
log.Info("START")
|
|
||||||
log.Printf("Add all() FRUIT=%s APPLE=%s\n", FRUIT, APPLE)
|
|
||||||
addAllFunc(w, FRUIT, APPLE, LOCK)
|
|
||||||
log.Printf("Add len() FRUIT=%s APPLES=%s\n", FRUIT, APPLES)
|
|
||||||
addLenFunc(w, FRUIT, APPLES, LOCK)
|
|
||||||
log.Printf("Add selectAll() FRUIT=%s APPLE=%s APPLES=%s\n", FRUIT, APPLE, APPLES)
|
|
||||||
addSelectAll(w, FRUIT, APPLE, APPLES, LOCK)
|
|
||||||
// newIter(w, FRUIT, APPLE, APPLES, LOCK)
|
|
||||||
log.Info("END")
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
return nil
|
|
||||||
pf.newGenerateSort(wSort, pf.Bases)
|
|
||||||
pf.newGenerateSort(wSort, pf.Base)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
pf.appendUnique(wFind) // Append() enforce no unique keys
|
|
||||||
if argv.Delete {
|
|
||||||
pf.deleteWithCopyFunc(wFind)
|
|
||||||
} else {
|
|
||||||
pf.deleteFunc(wFind)
|
|
||||||
}
|
|
||||||
pf.findFunc(wFind)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
wFind, _ := os.OpenFile(pf.Filebase+".find.pb.go", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
|
||||||
defer wFind.Close()
|
|
||||||
header(wFind, pf)
|
|
||||||
pf.specialBases(wFind)
|
|
||||||
|
|
||||||
// attempt to add sort functions for pf.Base
|
|
||||||
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
func addIterNew(w io.Write, msg *MsgName {
|
|
||||||
var FRUIT string = parent.Name
|
|
||||||
var LOCK string = parent.Lockname
|
|
||||||
newIter(w, FRUIT, APPLE, APPLES, LOCK)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
func (pf *File) newGenerateSort(w io.Writer, parent *MsgName) error {
|
|
||||||
var FRUIT string = parent.Name
|
|
||||||
var LOCK string = parent.Lockname
|
|
||||||
|
|
||||||
for _, v := range parent.Vars {
|
|
||||||
if !v.IsRepeated {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
var APPLES string = v.VarName
|
|
||||||
var APPLE string = v.VarType
|
|
||||||
msg := pf.findMsg(APPLE)
|
|
||||||
if msg == nil {
|
|
||||||
return fmt.Errorf("failed to find struct %s", APPLE)
|
|
||||||
}
|
|
||||||
if msg.NeedIter {
|
|
||||||
parent.NeedIter = false
|
|
||||||
// only can run these once for now
|
|
||||||
log.Info("START")
|
|
||||||
log.Printf("Add all() FRUIT=%s APPLE=%s\n", FRUIT, APPLE)
|
|
||||||
// addAllFunc(w, FRUIT, APPLE, LOCK)
|
|
||||||
log.Printf("Add len() FRUIT=%s APPLES=%s\n", FRUIT, APPLES)
|
|
||||||
addLenFunc(w, FRUIT, APPLES, LOCK)
|
|
||||||
log.Printf("Add selectAll() FRUIT=%s APPLE=%s APPLES=%s\n", FRUIT, APPLE, APPLES)
|
|
||||||
addSelectAll(w, FRUIT, APPLE, APPLES, LOCK)
|
|
||||||
// newIter(w, FRUIT, APPLE, APPLES, LOCK)
|
|
||||||
log.Info("END")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range msg.Vars {
|
|
||||||
if !v.HasSort {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
var COLOR string = v.VarName
|
|
||||||
newSortBy(w, FRUIT, APPLE, APPLES, COLOR)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
func (pf *File) findMsg(s string) *MsgName {
|
func (pf *File) findMsg(s string) *MsgName {
|
||||||
if pf.Bases.Name == s {
|
if pf.Bases.Name == s {
|
||||||
return pf.Bases
|
return pf.Bases
|
||||||
|
@ -396,6 +333,8 @@ func (pf *File) specialBases(wFind io.Writer) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
// to simplify being able to read the code, FRUIT, APPLES and APPLE are used
|
// 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
|
// FRUIT == the string name of the message in the protobuf file
|
||||||
// APPLE == the type of the repeated variable
|
// APPLE == the type of the repeated variable
|
||||||
|
@ -442,6 +381,7 @@ func (pf *File) processMessage(parent *MsgName, wSort, wFind io.Writer) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
func (parent *MsgName) addFindByMsg(w io.Writer, FRUIT, APPLES, APPLE, LOCK string) {
|
func (parent *MsgName) addFindByMsg(w io.Writer, FRUIT, APPLES, APPLE, LOCK string) {
|
||||||
for _, v := range parent.Vars {
|
for _, v := range parent.Vars {
|
||||||
|
@ -453,6 +393,7 @@ func (parent *MsgName) addFindByMsg(w io.Writer, FRUIT, APPLES, APPLE, LOCK stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
func (parent *MsgName) addDeleteByMsg(w io.Writer, FRUIT, APPLES, APPLE string) {
|
func (parent *MsgName) addDeleteByMsg(w io.Writer, FRUIT, APPLES, APPLE string) {
|
||||||
// log.Printf("\tDELETE: %s %s for %s\n", APPLES, APPLE, FRUIT)
|
// log.Printf("\tDELETE: %s %s for %s\n", APPLES, APPLE, FRUIT)
|
||||||
var COLORS []string
|
var COLORS []string
|
||||||
|
@ -471,6 +412,7 @@ func (parent *MsgName) addDeleteByMsg(w io.Writer, FRUIT, APPLES, APPLE string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
func (parent *MsgName) addInsertByMsg(w io.Writer, FRUIT, APPLES, APPLE string) {
|
func (parent *MsgName) addInsertByMsg(w io.Writer, FRUIT, APPLES, APPLE string) {
|
||||||
// log.Printf("\tINSERT: %s %s for %s\n", APPLES, APPLE, FRUIT)
|
// log.Printf("\tINSERT: %s %s for %s\n", APPLES, APPLE, FRUIT)
|
||||||
|
|
|
@ -66,3 +66,29 @@ func (msg *MsgName) appendUniqueCOLOR(w io.Writer, FRUIT, APPLES, APPLE, COLOR s
|
||||||
fmt.Fprintln(w, "}")
|
fmt.Fprintln(w, "}")
|
||||||
fmt.Fprintln(w, "")
|
fmt.Fprintln(w, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unique Append. rejects Append() if value is already defined
|
||||||
|
// compares the field 'COLOR' in the STRUCT with VARNAME
|
||||||
|
// that's not the right description above, but whatever, you get the idea
|
||||||
|
func (msg *MsgName) addAppendBy(w io.Writer, STRUCT, FUNCNAME, STRUCTVAR, VARNAME, VARTYPE string) string {
|
||||||
|
LOCK := msg.getLockname("x")
|
||||||
|
|
||||||
|
funcdef := "func (x *" + STRUCT + ") " + FUNCNAME + "(y *" + VARTYPE + ") bool"
|
||||||
|
|
||||||
|
fmt.Fprintln(w, funcdef, "{")
|
||||||
|
fmt.Fprintln(w, " "+LOCK+".Lock()")
|
||||||
|
fmt.Fprintln(w, " defer "+LOCK+".Unlock()")
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
fmt.Fprintln(w, " for _, p := range x."+STRUCTVAR+" {")
|
||||||
|
fmt.Fprintln(w, " if p."+VARNAME+" == y."+VARNAME+" {")
|
||||||
|
fmt.Fprintln(w, " return false")
|
||||||
|
fmt.Fprintln(w, " }")
|
||||||
|
fmt.Fprintln(w, " }")
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
fmt.Fprintln(w, " x."+STRUCTVAR+" = append(x."+STRUCTVAR+", y)")
|
||||||
|
fmt.Fprintln(w, " return true")
|
||||||
|
fmt.Fprintln(w, "}")
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
|
||||||
|
return funcdef
|
||||||
|
}
|
||||||
|
|
|
@ -38,10 +38,10 @@ func generateFindBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR, LOCK string) {
|
||||||
fmt.Fprintln(w, "")
|
fmt.Fprintln(w, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg *MsgName) deleteBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR string) {
|
func (msg *MsgName) deleteBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR, FUNCNAME string) string {
|
||||||
LOCK := msg.getLockname("x")
|
LOCK := msg.getLockname("x")
|
||||||
|
|
||||||
fmt.Fprintln(w, "func (x *"+FRUIT+") DeleteBy"+COLOR+"(s string) bool {")
|
fmt.Fprintln(w, "func (x *"+FRUIT+") "+FUNCNAME+"(s string) bool {")
|
||||||
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, "")
|
||||||
|
@ -55,14 +55,16 @@ func (msg *MsgName) deleteBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR string) {
|
||||||
fmt.Fprintln(w, " return false")
|
fmt.Fprintln(w, " return false")
|
||||||
fmt.Fprintln(w, "}")
|
fmt.Fprintln(w, "}")
|
||||||
fmt.Fprintln(w, "")
|
fmt.Fprintln(w, "")
|
||||||
|
|
||||||
|
return "func (x *" + FRUIT + ") DeleteBy" + COLOR + "(s string) bool {"
|
||||||
}
|
}
|
||||||
|
|
||||||
// this tries to return the deleted one but is wrong/gives warning if mutex lock is in struct
|
// this tries to return the deleted one but is wrong/gives warning if mutex lock is in struct
|
||||||
func (msg *MsgName) deleteByWithCopy(w io.Writer, FRUIT, APPLES, APPLE, COLOR string) {
|
func (msg *MsgName) deleteByWithCopy(w io.Writer, FRUIT, APPLES, APPLE, COLOR, FUNCNAME string) string {
|
||||||
LOCK := msg.getLockname("x")
|
LOCK := msg.getLockname("x")
|
||||||
|
|
||||||
fmt.Fprintln(w, "// TESTING fails with 'go vet' warning")
|
fmt.Fprintln(w, "// TESTING fails with 'go vet' warning")
|
||||||
fmt.Fprintln(w, "func (x *"+FRUIT+") DeleteBy"+COLOR+"(s string) *"+APPLE+" {")
|
fmt.Fprintln(w, "func (x *"+FRUIT+") "+FUNCNAME+"(s string) *"+APPLE+" {")
|
||||||
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, "")
|
||||||
|
@ -79,6 +81,8 @@ func (msg *MsgName) deleteByWithCopy(w io.Writer, FRUIT, APPLES, APPLE, COLOR st
|
||||||
fmt.Fprintln(w, " return nil")
|
fmt.Fprintln(w, " return nil")
|
||||||
fmt.Fprintln(w, "}")
|
fmt.Fprintln(w, "}")
|
||||||
fmt.Fprintln(w, "")
|
fmt.Fprintln(w, "")
|
||||||
|
|
||||||
|
return "func (x *" + FRUIT + ") DeleteBy" + COLOR + "(s string) *" + APPLE + " {"
|
||||||
}
|
}
|
||||||
|
|
||||||
// new 2025 idea. useful? TODO: look at this again in 1y
|
// new 2025 idea. useful? TODO: look at this again in 1y
|
||||||
|
|
Loading…
Reference in New Issue