summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-10 18:26:44 -0600
committerJeff Carr <[email protected]>2025-01-10 18:26:44 -0600
commitdc86ae010f688eefc5f4757d1c6eb620effc68f9 (patch)
tree7d0d9845bbbbe3817a0a126a220bfbdf9e4e2f6f
parent57f8f88ae9b6622e4df2fe6f1720d711ae8a8819 (diff)
new easier to read Find() Delete() and Append()
-rw-r--r--example/Makefile8
-rw-r--r--sort.go21
-rw-r--r--sortNew.go71
3 files changed, 92 insertions, 8 deletions
diff --git a/example/Makefile b/example/Makefile
index 552c332..f704534 100644
--- a/example/Makefile
+++ b/example/Makefile
@@ -19,6 +19,14 @@ build:
simpleMutexProtoc:
../autogenpb --proto fruit.proto --package main
+# why does this fail to compile? I'm not sure. maybe someone smart can figure it out
+# basically, it just trys to return the deleted record but says something
+# about the RWmutex lock being copied and GO fails to compile
+# I'm don't grok what is going on. This autogenerated code should
+# provide as simple as one could hope for automated way to try to debug it though!
+simpleMutexProtocWithDeleteCopy:
+ ../autogenpb --proto fruit.proto --package main --delete
+
simpleMutexGlobal:
../autogenpb --proto fruit.proto --package main --mutex=false
diff --git a/sort.go b/sort.go
index ad59978..e10f1b1 100644
--- a/sort.go
+++ b/sort.go
@@ -76,6 +76,11 @@ func (pf *File) addSortByMsg(parent *MsgName, find *MsgVar, wSort, wFind io.Writ
return fmt.Errorf("failed to find struct %s", find.VarType)
}
log.Printf("FOUND!: %s %s for %s\n", find.VarName, find.VarType, found.Name)
+ var COLORS []string
+ var FRUIT string = parent.Name
+ var APPLES string = cases.Title(language.English, cases.NoLower).String(find.VarName)
+ var APPLE string = find.VarType
+
for _, v := range found.Vars {
if v.HasSort {
// log.Printf("\tSort!: %s %s for %s\n", find.VarName, find.VarType, v.VarName)
@@ -83,20 +88,24 @@ func (pf *File) addSortByMsg(parent *MsgName, find *MsgVar, wSort, wFind io.Writ
log.Printf("\t(x %s) SortdBy%s() *%sIter\n", parent.Name, newS, find.VarType)
}
if v.HasUnique {
- // log.Printf("\tUniq!: %s %s for %s\n", find.VarName, find.VarType, v.VarName)
newS := cases.Title(language.English, cases.NoLower).String(v.VarName)
- log.Printf("\t(x %s) AppendUniqueBy%s(%s)\n", parent.Name, newS, find.VarType)
- var FRUIT string = parent.Name
- var APPLES string = cases.Title(language.English, cases.NoLower).String(find.VarName)
- var APPLE string = find.VarType
var COLOR string = newS
+ COLORS = append(COLORS, COLOR)
+
+ log.Printf("\t(x %s) AppendUniqueBy%s(%s)\n", parent.Name, newS, find.VarType)
parent.appendUniqueBy(wFind, FRUIT, APPLES, APPLE, COLOR)
- log.Printf("\t(x %s) FindBy%s(string) *%s\n", parent.Name, newS, find.VarType)
+
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, find.VarType)
+ parent.deleteBy(wFind, FRUIT, APPLES, APPLE, COLOR)
}
}
}
+ if len(COLORS) > 0 {
+ parent.appendUnique(wFind, FRUIT, APPLES, APPLE, COLORS)
+ }
return nil
}
diff --git a/sortNew.go b/sortNew.go
index d2c05b1..6f31348 100644
--- a/sortNew.go
+++ b/sortNew.go
@@ -23,13 +23,13 @@ func (msg *MsgName) appendUnique(w io.Writer, FRUIT, APPLES, APPLE string, COLOR
fmt.Fprintln(w, " "+LOCK+".Lock()")
fmt.Fprintln(w, " defer "+LOCK+".Unlock()")
fmt.Fprintln(w, "")
+ fmt.Fprintln(w, " for _, p := range x."+APPLES+" {")
for _, COLOR := range COLORS {
- fmt.Fprintln(w, " for _, p := range x."+APPLES+" {")
fmt.Fprintln(w, " if p."+COLOR+" == newP."+COLOR+" {")
fmt.Fprintln(w, " return false")
fmt.Fprintln(w, " }")
- fmt.Fprintln(w, " }")
}
+ fmt.Fprintln(w, " }")
fmt.Fprintln(w, "")
fmt.Fprintln(w, " x."+APPLES+" = append(x."+APPLES+", newP)")
fmt.Fprintln(w, " return true")
@@ -57,3 +57,70 @@ func (msg *MsgName) appendUniqueBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR stri
fmt.Fprintln(w, "}")
fmt.Fprintln(w, "")
}
+
+func (msg *MsgName) findBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR string) {
+ LOCK := msg.getLockname("x")
+
+ fmt.Fprintln(w, "// TESTING")
+ fmt.Fprintln(w, "// find a dependancy by the go path")
+ fmt.Fprintln(w, "func (x *"+FRUIT+") FindBy"+COLOR+"(s string) *"+APPLE+" {")
+ 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."+APPLES+" {")
+ fmt.Fprintln(w, " if x."+APPLES+"[i]."+COLOR+" == s {")
+ fmt.Fprintln(w, " return x."+APPLES+"[i]")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " return nil")
+ fmt.Fprintln(w, "}")
+ fmt.Fprintln(w, "")
+}
+
+func (msg *MsgName) deleteBy(w io.Writer, FRUIT, APPLES, APPLE, COLOR string) {
+ LOCK := msg.getLockname("x")
+
+ fmt.Fprintln(w, "// TESTING")
+ fmt.Fprintln(w, "func (x *"+FRUIT+") DeleteBy"+COLOR+"(s string) bool {")
+ fmt.Fprintln(w, " "+LOCK+".RLock()")
+ fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
+ fmt.Fprintln(w, "")
+ fmt.Fprintln(w, " for i, _ := range x."+APPLES+" {")
+ fmt.Fprintln(w, " if x."+APPLES+"[i]."+COLOR+" == s {")
+ fmt.Fprintln(w, " x."+APPLES+"[i] = x."+APPLES+"[len(x."+APPLES+")-1]")
+ fmt.Fprintln(w, " x."+APPLES+" = x."+APPLES+"[:len(x."+APPLES+")-1]")
+ fmt.Fprintln(w, " return true")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " return false")
+ fmt.Fprintln(w, "}")
+ fmt.Fprintln(w, "")
+}
+
+// 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) {
+ LOCK := msg.getLockname("x")
+
+ fmt.Fprintln(w, "// TESTING")
+ fmt.Fprintln(w, "func (x *"+FRUIT+") DeleteBy"+COLOR+"(s string) *"+APPLE+" {")
+ fmt.Fprintln(w, " "+LOCK+".RLock()")
+ fmt.Fprintln(w, " defer "+LOCK+".RUnlock()")
+ fmt.Fprintln(w, "")
+ fmt.Fprintln(w, " var newr "+APPLE)
+ fmt.Fprintln(w, "")
+ fmt.Fprintln(w, " for i, _ := range x."+APPLES+" {")
+ fmt.Fprintln(w, " if x."+APPLES+"[i]."+COLOR+" == s {")
+ fmt.Fprintln(w, " newr = *x."+APPLES+"[i]")
+ fmt.Fprintln(w, " x."+APPLES+"[i] = x."+APPLES+"[len(x."+APPLES+")-1]")
+ fmt.Fprintln(w, " x."+APPLES+" = x."+APPLES+"[:len(x."+APPLES+")-1]")
+ fmt.Fprintln(w, " return &newr")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " }")
+ fmt.Fprintln(w, " return nil")
+ fmt.Fprintln(w, "}")
+ fmt.Fprintln(w, "")
+}