Skip to content

Commit 1016e7e

Browse files
committed
groot/{rarrow,rdict,rtree}: add [N] or [X] to generated struct tags in types generated from StreamerInfos
1 parent 2e47042 commit 1016e7e

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

groot/rarrow/rarrow.go

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package rarrow // import "go-hep.org/x/hep/groot/rarrow"
88
import (
99
"fmt"
1010
"reflect"
11+
"strings"
1112

1213
"github.com/apache/arrow/go/arrow"
1314
"github.com/apache/arrow/go/arrow/array"
@@ -164,6 +165,9 @@ func dataTypeFromGo(typ reflect.Type) arrow.DataType {
164165
if v, ok := f.Tag.Lookup("groot"); ok {
165166
name = v
166167
}
168+
if idx := strings.Index(name, "["); idx > 0 {
169+
name = name[:idx]
170+
}
167171
fields[i] = arrow.Field{
168172
Name: name,
169173
Type: dataTypeFromGo(f.Type),

groot/rdict/object.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,14 @@ func genTypeFromSI(sictx rbytes.StreamerInfoContext, si rbytes.StreamerInfo) ref
133133
var fields = make([]reflect.StructField, 0, len(si.Elements()))
134134
for _, se := range si.Elements() {
135135
rt := genTypeFromSE(sictx, se)
136+
et := se.Title()
137+
if rt.Kind() == reflect.Array {
138+
et = fmt.Sprintf("[%d]", rt.Len())
139+
}
136140
ft := reflect.StructField{
137141
Name: "ROOT_" + cxxNameSanitizer.Replace(se.Name()),
138142
Type: rt,
139-
Tag: reflect.StructTag(fmt.Sprintf("groot:%q", se.Name())),
143+
Tag: reflect.StructTag(fmt.Sprintf("groot:%q", se.Name()+et)),
140144
}
141145
fields = append(fields, ft)
142146
}

groot/rtree/read_streamers.go

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ func fieldOf(rt reflect.Type, field string) int {
4848
if name == "" {
4949
name = f.Name
5050
}
51+
if idx := strings.Index(name, "["); idx > 0 {
52+
name = name[:idx]
53+
}
5154
if name == field {
5255
return i
5356
}

0 commit comments

Comments
 (0)