summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-02-22 20:21:38 +0200
committerPaul Buetow <paul@buetow.org>2024-02-22 20:21:38 +0200
commite800879cd818f51f83c3bfa86a42aa331a58af0c (patch)
tree1dbad6420c20369ec4976bd9e8ba3b0429b7e2f2
parent5e3da322f4deb438f0e7ad1b1245d524d2ec0246 (diff)
add sync pool to auto-generated types.go
-rw-r--r--internal/generated/nqc.raku72
-rw-r--r--internal/generated/types/types.go41
2 files changed, 88 insertions, 25 deletions
diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku
index 6cb9e56..578a263 100644
--- a/internal/generated/nqc.raku
+++ b/internal/generated/nqc.raku
@@ -39,36 +39,42 @@ class NQCToGoActions {
}
method statement($/) {
- make "\n" ~ $<struct>.made ~ "\n";
+ make "\n" ~ $<struct>.made;
}
method constant($/) {
push @!const-names: ~$<identifier>;
my $const-type = $<identifier>.ends-with('_OP_ID') ?? ' OpId' !! '';
- make 'const ' ~ $<identifier> ~ $const-type ~ " = " ~ $<number> ~ "\n";
+
+ make qq:to/END/;
+ const {$<identifier>}$const-type = {$<number>}
+ END
}
method !constant-go-string-method returns Str {
- return qq:to/END/;
- type OpId uint32
-
- func (o OpId) String() string \{
- \tswitch (o) \{
- \t{@!const-names.grep(/_OP_ID$/).map({
- "case $_:\n" ~ "\t\treturn \"{$_.subst('_OP_ID', '').lc}\""
- }).join("\n\t")}
- default:
- \tpanic(fmt.Sprintf("Unknown OpId: %d", o))
- \t\}
- \}
- END
+ qq:to/END/;
+ type OpId uint32
+
+ func (o OpId) String() string \{
+ switch (o) \{
+ {@!const-names.grep(/_OP_ID$/).map({
+ "case $_: return \"{$_.subst('_OP_ID', '').lc}\""
+ }).join('; ')}
+ default: panic(fmt.Sprintf("Unknown OpId: %d", o))
+ \}
+ \}
+ END
}
method struct($/) {
- make 'type ' ~ $<identifier>.made ~ " struct \{\n\t"
- ~ $<member>.map(*.made).join("\n\t")
- ~ "\n\}\n\n"
- ~ self!struct-go-string-method($/);
+ make qq:to/END/;
+ type {$<identifier>.made} struct \{
+ {$<member>.map(*.made).join('; ')}
+ \}
+
+ {self!struct-go-string-method($/)}
+ {($<identifier>.made.ends-with('Event') ?? "\n" ~ self!struct-go-sync-pool($/) !! '')}
+ END
}
# Generate String() method on the Go struct, for pretty printing.
@@ -82,11 +88,29 @@ class NQCToGoActions {
($_.<type> eq 'char' && $_.<arraysize>) ?? "string({$ref}[:])" !! $ref;
});
- return qq:to/END/;
- func ({$self-ref} {$<identifier>.made}) String() string \{
- return fmt.Sprintf("{@format.join(' ')}", {@args.join(', ')})
- \}
- END
+ qq:to/END/;
+ func ($self-ref {$<identifier>.made}) String() string \{
+ return fmt.Sprintf("{@format.join(' ')}", {@args.join(', ')})
+ \}
+ END
+ }
+
+ method !struct-go-sync-pool($/) returns Str {
+ my Str $identifier = $/<identifier>.made;
+
+ qq:to/END/;
+ var poolOf{$identifier}s = sync.Pool\{
+ New: func() interface\{\} \{ return &$identifier\{\} \},
+ \}
+
+ func {$identifier}New() *$identifier \{
+ return poolOf{$identifier}s.Get().(*$identifier);
+ \}
+
+ func {$identifier}Recycle(elem *$identifier) \{
+ poolOf{$identifier}s.Put(elem)
+ \}
+ END
}
method member($/) {
diff --git a/internal/generated/types/types.go b/internal/generated/types/types.go
index ca2172b..db86f28 100644
--- a/internal/generated/types/types.go
+++ b/internal/generated/types/types.go
@@ -1,7 +1,10 @@
// This file was generated - don't change manually!
package types
-import "fmt"
+import (
+ "fmt"
+ "sync"
+)
type OpId uint32
@@ -55,6 +58,18 @@ func (n NullEvent) String() string {
return fmt.Sprintf("OpId:%v PidTgid:%v Time:%v", n.OpId, n.PidTgid, n.Time)
}
+var poolOfNullEvents = sync.Pool{
+ New: func() interface{} { return &NullEvent{} },
+}
+
+func NullEventNew() *NullEvent {
+ return poolOfNullEvents.Get().(*NullEvent)
+}
+
+func NullEventRecycle(elem *NullEvent) {
+ poolOfNullEvents.Put(elem)
+}
+
type FdEvent struct {
OpId OpId
PidTgid uint32
@@ -66,6 +81,18 @@ func (f FdEvent) String() string {
return fmt.Sprintf("OpId:%v PidTgid:%v Time:%v Fd:%v", f.OpId, f.PidTgid, f.Time, f.Fd)
}
+var poolOfFdEvents = sync.Pool{
+ New: func() interface{} { return &FdEvent{} },
+}
+
+func FdEventNew() *FdEvent {
+ return poolOfFdEvents.Get().(*FdEvent)
+}
+
+func FdEventRecycle(elem *FdEvent) {
+ poolOfFdEvents.Put(elem)
+}
+
type OpenatEnterEvent struct {
OpId OpId
PidTgid uint32
@@ -78,6 +105,18 @@ func (o OpenatEnterEvent) String() string {
return fmt.Sprintf("OpId:%v PidTgid:%v Time:%v Filename:%v Comm:%v", o.OpId, o.PidTgid, o.Time, string(o.Filename[:]), string(o.Comm[:]))
}
+var poolOfOpenatEnterEvents = sync.Pool{
+ New: func() interface{} { return &OpenatEnterEvent{} },
+}
+
+func OpenatEnterEventNew() *OpenatEnterEvent {
+ return poolOfOpenatEnterEvents.Get().(*OpenatEnterEvent)
+}
+
+func OpenatEnterEventRecycle(elem *OpenatEnterEvent) {
+ poolOfOpenatEnterEvents.Put(elem)
+}
+
type Flags struct {
UidFilter uint32
}