go-hep.org/x/hep@v0.38.1/groot/rtree/rleaf_gen.go (about)

     1  // Copyright ©2020 The go-hep Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Automatically generated. DO NOT EDIT.
     6  
     7  package rtree
     8  
     9  import (
    10  	"reflect"
    11  	"unsafe"
    12  
    13  	"go-hep.org/x/hep/groot/rbytes"
    14  	"go-hep.org/x/hep/groot/root"
    15  )
    16  
    17  // rleafValBool implements rleaf for ROOT TLeafO
    18  type rleafValBool struct {
    19  	base *LeafO
    20  	v    *bool
    21  }
    22  
    23  func newRLeafBool(leaf *LeafO, rvar ReadVar, rctx rleafCtx) rleaf {
    24  	switch {
    25  	case leaf.count != nil:
    26  		switch len(leaf.Shape()) {
    27  		case 0:
    28  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]bool)
    29  			if *slice == nil {
    30  				*slice = make([]bool, 0, rleafDefaultSliceCap)
    31  			}
    32  			return &rleafSliBool{
    33  				base: leaf,
    34  				n:    rctx.rcountFunc(leaf.count.Name()),
    35  				v:    slice,
    36  				set:  func() {},
    37  			}
    38  		default:
    39  			sz := 1
    40  			for _, v := range leaf.Shape() {
    41  				sz *= v
    42  			}
    43  			sli := reflect.ValueOf(rvar.Value).Elem()
    44  			ptr := (*[]bool)(unsafe.Pointer(sli.UnsafeAddr()))
    45  			hdr := unsafeDecaySliceArray[bool](ptr, sz)
    46  			if *hdr == nil {
    47  				*hdr = make([]bool, 0, rleafDefaultSliceCap*sz)
    48  			}
    49  			rleaf := &rleafSliBool{
    50  				base: leaf,
    51  				n:    rctx.rcountFunc(leaf.count.Name()),
    52  				v:    hdr,
    53  			}
    54  			rhdr := reflect.ValueOf(hdr).Elem()
    55  			rptr := reflect.ValueOf(ptr).Elem()
    56  
    57  			// alias slices
    58  			rptr.Set(rhdr)
    59  
    60  			rleaf.set = func() {
    61  				n := rleaf.n()
    62  				rptr.SetLen(n)
    63  			}
    64  
    65  			return rleaf
    66  		}
    67  
    68  	case leaf.len > 1:
    69  		return &rleafArrBool{
    70  			base: leaf,
    71  			v:    *unsafeDecayArray[bool](rvar.Value),
    72  		}
    73  
    74  	default:
    75  		return &rleafValBool{
    76  			base: leaf,
    77  			v:    reflect.ValueOf(rvar.Value).Interface().(*bool),
    78  		}
    79  	}
    80  }
    81  
    82  func (leaf *rleafValBool) Leaf() Leaf { return leaf.base }
    83  
    84  func (leaf *rleafValBool) Offset() int64 {
    85  	return int64(leaf.base.Offset())
    86  }
    87  
    88  func (leaf *rleafValBool) readFromBuffer(r *rbytes.RBuffer) error {
    89  	*leaf.v = r.ReadBool()
    90  	return r.Err()
    91  }
    92  
    93  var (
    94  	_ rleaf = (*rleafValBool)(nil)
    95  )
    96  
    97  // rleafArrBool implements rleaf for ROOT TLeafO
    98  type rleafArrBool struct {
    99  	base *LeafO
   100  	v    []bool
   101  }
   102  
   103  func (leaf *rleafArrBool) Leaf() Leaf { return leaf.base }
   104  
   105  func (leaf *rleafArrBool) Offset() int64 {
   106  	return int64(leaf.base.Offset())
   107  }
   108  
   109  func (leaf *rleafArrBool) readFromBuffer(r *rbytes.RBuffer) error {
   110  	r.ReadArrayBool(leaf.v)
   111  	return r.Err()
   112  }
   113  
   114  var (
   115  	_ rleaf = (*rleafArrBool)(nil)
   116  )
   117  
   118  // rleafSliBool implements rleaf for ROOT TLeafO
   119  type rleafSliBool struct {
   120  	base *LeafO
   121  	n    func() int
   122  	v    *[]bool
   123  	set  func() // reslice underlying slice
   124  }
   125  
   126  func (leaf *rleafSliBool) Leaf() Leaf { return leaf.base }
   127  
   128  func (leaf *rleafSliBool) Offset() int64 {
   129  	return int64(leaf.base.Offset())
   130  }
   131  
   132  func (leaf *rleafSliBool) readFromBuffer(r *rbytes.RBuffer) error {
   133  	n := leaf.base.tleaf.len * leaf.n()
   134  	sli := rbytes.ResizeBool(*leaf.v, n)
   135  	r.ReadArrayBool(sli)
   136  	*leaf.v = sli
   137  	leaf.set()
   138  	return r.Err()
   139  }
   140  
   141  var (
   142  	_ rleaf = (*rleafSliBool)(nil)
   143  )
   144  
   145  // rleafValI8 implements rleaf for ROOT TLeafB
   146  type rleafValI8 struct {
   147  	base *LeafB
   148  	v    *int8
   149  }
   150  
   151  func newRLeafI8(leaf *LeafB, rvar ReadVar, rctx rleafCtx) rleaf {
   152  	switch {
   153  	case leaf.count != nil:
   154  		switch len(leaf.Shape()) {
   155  		case 0:
   156  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]int8)
   157  			if *slice == nil {
   158  				*slice = make([]int8, 0, rleafDefaultSliceCap)
   159  			}
   160  			return &rleafSliI8{
   161  				base: leaf,
   162  				n:    rctx.rcountFunc(leaf.count.Name()),
   163  				v:    slice,
   164  				set:  func() {},
   165  			}
   166  		default:
   167  			sz := 1
   168  			for _, v := range leaf.Shape() {
   169  				sz *= v
   170  			}
   171  			sli := reflect.ValueOf(rvar.Value).Elem()
   172  			ptr := (*[]int8)(unsafe.Pointer(sli.UnsafeAddr()))
   173  			hdr := unsafeDecaySliceArray[int8](ptr, sz)
   174  			if *hdr == nil {
   175  				*hdr = make([]int8, 0, rleafDefaultSliceCap*sz)
   176  			}
   177  			rleaf := &rleafSliI8{
   178  				base: leaf,
   179  				n:    rctx.rcountFunc(leaf.count.Name()),
   180  				v:    hdr,
   181  			}
   182  			rhdr := reflect.ValueOf(hdr).Elem()
   183  			rptr := reflect.ValueOf(ptr).Elem()
   184  
   185  			// alias slices
   186  			rptr.Set(rhdr)
   187  
   188  			rleaf.set = func() {
   189  				n := rleaf.n()
   190  				rptr.SetLen(n)
   191  			}
   192  
   193  			return rleaf
   194  		}
   195  
   196  	case leaf.len > 1:
   197  		return &rleafArrI8{
   198  			base: leaf,
   199  			v:    *unsafeDecayArray[int8](rvar.Value),
   200  		}
   201  
   202  	default:
   203  		return &rleafValI8{
   204  			base: leaf,
   205  			v:    reflect.ValueOf(rvar.Value).Interface().(*int8),
   206  		}
   207  	}
   208  }
   209  
   210  func (leaf *rleafValI8) Leaf() Leaf { return leaf.base }
   211  
   212  func (leaf *rleafValI8) Offset() int64 {
   213  	return int64(leaf.base.Offset())
   214  }
   215  
   216  func (leaf *rleafValI8) ivalue() int { return int(*leaf.v) }
   217  
   218  func (leaf *rleafValI8) readFromBuffer(r *rbytes.RBuffer) error {
   219  	*leaf.v = r.ReadI8()
   220  	return r.Err()
   221  }
   222  
   223  var (
   224  	_ rleaf = (*rleafValI8)(nil)
   225  )
   226  
   227  // rleafArrI8 implements rleaf for ROOT TLeafB
   228  type rleafArrI8 struct {
   229  	base *LeafB
   230  	v    []int8
   231  }
   232  
   233  func (leaf *rleafArrI8) Leaf() Leaf { return leaf.base }
   234  
   235  func (leaf *rleafArrI8) Offset() int64 {
   236  	return int64(leaf.base.Offset())
   237  }
   238  
   239  func (leaf *rleafArrI8) readFromBuffer(r *rbytes.RBuffer) error {
   240  	r.ReadArrayI8(leaf.v)
   241  	return r.Err()
   242  }
   243  
   244  var (
   245  	_ rleaf = (*rleafArrI8)(nil)
   246  )
   247  
   248  // rleafSliI8 implements rleaf for ROOT TLeafB
   249  type rleafSliI8 struct {
   250  	base *LeafB
   251  	n    func() int
   252  	v    *[]int8
   253  	set  func() // reslice underlying slice
   254  }
   255  
   256  func (leaf *rleafSliI8) Leaf() Leaf { return leaf.base }
   257  
   258  func (leaf *rleafSliI8) Offset() int64 {
   259  	return int64(leaf.base.Offset())
   260  }
   261  
   262  func (leaf *rleafSliI8) readFromBuffer(r *rbytes.RBuffer) error {
   263  	n := leaf.base.tleaf.len * leaf.n()
   264  	sli := rbytes.ResizeI8(*leaf.v, n)
   265  	r.ReadArrayI8(sli)
   266  	*leaf.v = sli
   267  	leaf.set()
   268  	return r.Err()
   269  }
   270  
   271  var (
   272  	_ rleaf = (*rleafSliI8)(nil)
   273  )
   274  
   275  // rleafValI16 implements rleaf for ROOT TLeafS
   276  type rleafValI16 struct {
   277  	base *LeafS
   278  	v    *int16
   279  }
   280  
   281  func newRLeafI16(leaf *LeafS, rvar ReadVar, rctx rleafCtx) rleaf {
   282  	switch {
   283  	case leaf.count != nil:
   284  		switch len(leaf.Shape()) {
   285  		case 0:
   286  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]int16)
   287  			if *slice == nil {
   288  				*slice = make([]int16, 0, rleafDefaultSliceCap)
   289  			}
   290  			return &rleafSliI16{
   291  				base: leaf,
   292  				n:    rctx.rcountFunc(leaf.count.Name()),
   293  				v:    slice,
   294  				set:  func() {},
   295  			}
   296  		default:
   297  			sz := 1
   298  			for _, v := range leaf.Shape() {
   299  				sz *= v
   300  			}
   301  			sli := reflect.ValueOf(rvar.Value).Elem()
   302  			ptr := (*[]int16)(unsafe.Pointer(sli.UnsafeAddr()))
   303  			hdr := unsafeDecaySliceArray[int16](ptr, sz)
   304  			if *hdr == nil {
   305  				*hdr = make([]int16, 0, rleafDefaultSliceCap*sz)
   306  			}
   307  			rleaf := &rleafSliI16{
   308  				base: leaf,
   309  				n:    rctx.rcountFunc(leaf.count.Name()),
   310  				v:    hdr,
   311  			}
   312  			rhdr := reflect.ValueOf(hdr).Elem()
   313  			rptr := reflect.ValueOf(ptr).Elem()
   314  
   315  			// alias slices
   316  			rptr.Set(rhdr)
   317  
   318  			rleaf.set = func() {
   319  				n := rleaf.n()
   320  				rptr.SetLen(n)
   321  			}
   322  
   323  			return rleaf
   324  		}
   325  
   326  	case leaf.len > 1:
   327  		return &rleafArrI16{
   328  			base: leaf,
   329  			v:    *unsafeDecayArray[int16](rvar.Value),
   330  		}
   331  
   332  	default:
   333  		return &rleafValI16{
   334  			base: leaf,
   335  			v:    reflect.ValueOf(rvar.Value).Interface().(*int16),
   336  		}
   337  	}
   338  }
   339  
   340  func (leaf *rleafValI16) Leaf() Leaf { return leaf.base }
   341  
   342  func (leaf *rleafValI16) Offset() int64 {
   343  	return int64(leaf.base.Offset())
   344  }
   345  
   346  func (leaf *rleafValI16) ivalue() int { return int(*leaf.v) }
   347  
   348  func (leaf *rleafValI16) readFromBuffer(r *rbytes.RBuffer) error {
   349  	*leaf.v = r.ReadI16()
   350  	return r.Err()
   351  }
   352  
   353  var (
   354  	_ rleaf = (*rleafValI16)(nil)
   355  )
   356  
   357  // rleafArrI16 implements rleaf for ROOT TLeafS
   358  type rleafArrI16 struct {
   359  	base *LeafS
   360  	v    []int16
   361  }
   362  
   363  func (leaf *rleafArrI16) Leaf() Leaf { return leaf.base }
   364  
   365  func (leaf *rleafArrI16) Offset() int64 {
   366  	return int64(leaf.base.Offset())
   367  }
   368  
   369  func (leaf *rleafArrI16) readFromBuffer(r *rbytes.RBuffer) error {
   370  	r.ReadArrayI16(leaf.v)
   371  	return r.Err()
   372  }
   373  
   374  var (
   375  	_ rleaf = (*rleafArrI16)(nil)
   376  )
   377  
   378  // rleafSliI16 implements rleaf for ROOT TLeafS
   379  type rleafSliI16 struct {
   380  	base *LeafS
   381  	n    func() int
   382  	v    *[]int16
   383  	set  func() // reslice underlying slice
   384  }
   385  
   386  func (leaf *rleafSliI16) Leaf() Leaf { return leaf.base }
   387  
   388  func (leaf *rleafSliI16) Offset() int64 {
   389  	return int64(leaf.base.Offset())
   390  }
   391  
   392  func (leaf *rleafSliI16) readFromBuffer(r *rbytes.RBuffer) error {
   393  	n := leaf.base.tleaf.len * leaf.n()
   394  	sli := rbytes.ResizeI16(*leaf.v, n)
   395  	r.ReadArrayI16(sli)
   396  	*leaf.v = sli
   397  	leaf.set()
   398  	return r.Err()
   399  }
   400  
   401  var (
   402  	_ rleaf = (*rleafSliI16)(nil)
   403  )
   404  
   405  // rleafValI32 implements rleaf for ROOT TLeafI
   406  type rleafValI32 struct {
   407  	base *LeafI
   408  	v    *int32
   409  }
   410  
   411  func newRLeafI32(leaf *LeafI, rvar ReadVar, rctx rleafCtx) rleaf {
   412  	switch {
   413  	case leaf.count != nil:
   414  		switch len(leaf.Shape()) {
   415  		case 0:
   416  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]int32)
   417  			if *slice == nil {
   418  				*slice = make([]int32, 0, rleafDefaultSliceCap)
   419  			}
   420  			return &rleafSliI32{
   421  				base: leaf,
   422  				n:    rctx.rcountFunc(leaf.count.Name()),
   423  				v:    slice,
   424  				set:  func() {},
   425  			}
   426  		default:
   427  			sz := 1
   428  			for _, v := range leaf.Shape() {
   429  				sz *= v
   430  			}
   431  			sli := reflect.ValueOf(rvar.Value).Elem()
   432  			ptr := (*[]int32)(unsafe.Pointer(sli.UnsafeAddr()))
   433  			hdr := unsafeDecaySliceArray[int32](ptr, sz)
   434  			if *hdr == nil {
   435  				*hdr = make([]int32, 0, rleafDefaultSliceCap*sz)
   436  			}
   437  			rleaf := &rleafSliI32{
   438  				base: leaf,
   439  				n:    rctx.rcountFunc(leaf.count.Name()),
   440  				v:    hdr,
   441  			}
   442  			rhdr := reflect.ValueOf(hdr).Elem()
   443  			rptr := reflect.ValueOf(ptr).Elem()
   444  
   445  			// alias slices
   446  			rptr.Set(rhdr)
   447  
   448  			rleaf.set = func() {
   449  				n := rleaf.n()
   450  				rptr.SetLen(n)
   451  			}
   452  
   453  			return rleaf
   454  		}
   455  
   456  	case leaf.len > 1:
   457  		return &rleafArrI32{
   458  			base: leaf,
   459  			v:    *unsafeDecayArray[int32](rvar.Value),
   460  		}
   461  
   462  	default:
   463  		return &rleafValI32{
   464  			base: leaf,
   465  			v:    reflect.ValueOf(rvar.Value).Interface().(*int32),
   466  		}
   467  	}
   468  }
   469  
   470  func (leaf *rleafValI32) Leaf() Leaf { return leaf.base }
   471  
   472  func (leaf *rleafValI32) Offset() int64 {
   473  	return int64(leaf.base.Offset())
   474  }
   475  
   476  func (leaf *rleafValI32) ivalue() int { return int(*leaf.v) }
   477  
   478  func (leaf *rleafValI32) readFromBuffer(r *rbytes.RBuffer) error {
   479  	*leaf.v = r.ReadI32()
   480  	return r.Err()
   481  }
   482  
   483  var (
   484  	_ rleaf = (*rleafValI32)(nil)
   485  )
   486  
   487  // rleafArrI32 implements rleaf for ROOT TLeafI
   488  type rleafArrI32 struct {
   489  	base *LeafI
   490  	v    []int32
   491  }
   492  
   493  func (leaf *rleafArrI32) Leaf() Leaf { return leaf.base }
   494  
   495  func (leaf *rleafArrI32) Offset() int64 {
   496  	return int64(leaf.base.Offset())
   497  }
   498  
   499  func (leaf *rleafArrI32) readFromBuffer(r *rbytes.RBuffer) error {
   500  	r.ReadArrayI32(leaf.v)
   501  	return r.Err()
   502  }
   503  
   504  var (
   505  	_ rleaf = (*rleafArrI32)(nil)
   506  )
   507  
   508  // rleafSliI32 implements rleaf for ROOT TLeafI
   509  type rleafSliI32 struct {
   510  	base *LeafI
   511  	n    func() int
   512  	v    *[]int32
   513  	set  func() // reslice underlying slice
   514  }
   515  
   516  func (leaf *rleafSliI32) Leaf() Leaf { return leaf.base }
   517  
   518  func (leaf *rleafSliI32) Offset() int64 {
   519  	return int64(leaf.base.Offset())
   520  }
   521  
   522  func (leaf *rleafSliI32) readFromBuffer(r *rbytes.RBuffer) error {
   523  	n := leaf.base.tleaf.len * leaf.n()
   524  	sli := rbytes.ResizeI32(*leaf.v, n)
   525  	r.ReadArrayI32(sli)
   526  	*leaf.v = sli
   527  	leaf.set()
   528  	return r.Err()
   529  }
   530  
   531  var (
   532  	_ rleaf = (*rleafSliI32)(nil)
   533  )
   534  
   535  // rleafValI64 implements rleaf for ROOT TLeafL
   536  type rleafValI64 struct {
   537  	base *LeafL
   538  	v    *int64
   539  }
   540  
   541  func newRLeafI64(leaf *LeafL, rvar ReadVar, rctx rleafCtx) rleaf {
   542  	switch {
   543  	case leaf.count != nil:
   544  		switch len(leaf.Shape()) {
   545  		case 0:
   546  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]int64)
   547  			if *slice == nil {
   548  				*slice = make([]int64, 0, rleafDefaultSliceCap)
   549  			}
   550  			return &rleafSliI64{
   551  				base: leaf,
   552  				n:    rctx.rcountFunc(leaf.count.Name()),
   553  				v:    slice,
   554  				set:  func() {},
   555  			}
   556  		default:
   557  			sz := 1
   558  			for _, v := range leaf.Shape() {
   559  				sz *= v
   560  			}
   561  			sli := reflect.ValueOf(rvar.Value).Elem()
   562  			ptr := (*[]int64)(unsafe.Pointer(sli.UnsafeAddr()))
   563  			hdr := unsafeDecaySliceArray[int64](ptr, sz)
   564  			if *hdr == nil {
   565  				*hdr = make([]int64, 0, rleafDefaultSliceCap*sz)
   566  			}
   567  			rleaf := &rleafSliI64{
   568  				base: leaf,
   569  				n:    rctx.rcountFunc(leaf.count.Name()),
   570  				v:    hdr,
   571  			}
   572  			rhdr := reflect.ValueOf(hdr).Elem()
   573  			rptr := reflect.ValueOf(ptr).Elem()
   574  
   575  			// alias slices
   576  			rptr.Set(rhdr)
   577  
   578  			rleaf.set = func() {
   579  				n := rleaf.n()
   580  				rptr.SetLen(n)
   581  			}
   582  
   583  			return rleaf
   584  		}
   585  
   586  	case leaf.len > 1:
   587  		return &rleafArrI64{
   588  			base: leaf,
   589  			v:    *unsafeDecayArray[int64](rvar.Value),
   590  		}
   591  
   592  	default:
   593  		return &rleafValI64{
   594  			base: leaf,
   595  			v:    reflect.ValueOf(rvar.Value).Interface().(*int64),
   596  		}
   597  	}
   598  }
   599  
   600  func (leaf *rleafValI64) Leaf() Leaf { return leaf.base }
   601  
   602  func (leaf *rleafValI64) Offset() int64 {
   603  	return int64(leaf.base.Offset())
   604  }
   605  
   606  func (leaf *rleafValI64) ivalue() int { return int(*leaf.v) }
   607  
   608  func (leaf *rleafValI64) readFromBuffer(r *rbytes.RBuffer) error {
   609  	*leaf.v = r.ReadI64()
   610  	return r.Err()
   611  }
   612  
   613  var (
   614  	_ rleaf = (*rleafValI64)(nil)
   615  )
   616  
   617  // rleafArrI64 implements rleaf for ROOT TLeafL
   618  type rleafArrI64 struct {
   619  	base *LeafL
   620  	v    []int64
   621  }
   622  
   623  func (leaf *rleafArrI64) Leaf() Leaf { return leaf.base }
   624  
   625  func (leaf *rleafArrI64) Offset() int64 {
   626  	return int64(leaf.base.Offset())
   627  }
   628  
   629  func (leaf *rleafArrI64) readFromBuffer(r *rbytes.RBuffer) error {
   630  	r.ReadArrayI64(leaf.v)
   631  	return r.Err()
   632  }
   633  
   634  var (
   635  	_ rleaf = (*rleafArrI64)(nil)
   636  )
   637  
   638  // rleafSliI64 implements rleaf for ROOT TLeafL
   639  type rleafSliI64 struct {
   640  	base *LeafL
   641  	n    func() int
   642  	v    *[]int64
   643  	set  func() // reslice underlying slice
   644  }
   645  
   646  func (leaf *rleafSliI64) Leaf() Leaf { return leaf.base }
   647  
   648  func (leaf *rleafSliI64) Offset() int64 {
   649  	return int64(leaf.base.Offset())
   650  }
   651  
   652  func (leaf *rleafSliI64) readFromBuffer(r *rbytes.RBuffer) error {
   653  	n := leaf.base.tleaf.len * leaf.n()
   654  	sli := rbytes.ResizeI64(*leaf.v, n)
   655  	r.ReadArrayI64(sli)
   656  	*leaf.v = sli
   657  	leaf.set()
   658  	return r.Err()
   659  }
   660  
   661  var (
   662  	_ rleaf = (*rleafSliI64)(nil)
   663  )
   664  
   665  // rleafValU8 implements rleaf for ROOT TLeafB
   666  type rleafValU8 struct {
   667  	base *LeafB
   668  	v    *uint8
   669  }
   670  
   671  func newRLeafU8(leaf *LeafB, rvar ReadVar, rctx rleafCtx) rleaf {
   672  	switch {
   673  	case leaf.count != nil:
   674  		switch len(leaf.Shape()) {
   675  		case 0:
   676  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]uint8)
   677  			if *slice == nil {
   678  				*slice = make([]uint8, 0, rleafDefaultSliceCap)
   679  			}
   680  			return &rleafSliU8{
   681  				base: leaf,
   682  				n:    rctx.rcountFunc(leaf.count.Name()),
   683  				v:    slice,
   684  				set:  func() {},
   685  			}
   686  		default:
   687  			sz := 1
   688  			for _, v := range leaf.Shape() {
   689  				sz *= v
   690  			}
   691  			sli := reflect.ValueOf(rvar.Value).Elem()
   692  			ptr := (*[]uint8)(unsafe.Pointer(sli.UnsafeAddr()))
   693  			hdr := unsafeDecaySliceArray[uint8](ptr, sz)
   694  			if *hdr == nil {
   695  				*hdr = make([]uint8, 0, rleafDefaultSliceCap*sz)
   696  			}
   697  			rleaf := &rleafSliU8{
   698  				base: leaf,
   699  				n:    rctx.rcountFunc(leaf.count.Name()),
   700  				v:    hdr,
   701  			}
   702  			rhdr := reflect.ValueOf(hdr).Elem()
   703  			rptr := reflect.ValueOf(ptr).Elem()
   704  
   705  			// alias slices
   706  			rptr.Set(rhdr)
   707  
   708  			rleaf.set = func() {
   709  				n := rleaf.n()
   710  				rptr.SetLen(n)
   711  			}
   712  
   713  			return rleaf
   714  		}
   715  
   716  	case leaf.len > 1:
   717  		return &rleafArrU8{
   718  			base: leaf,
   719  			v:    *unsafeDecayArray[uint8](rvar.Value),
   720  		}
   721  
   722  	default:
   723  		return &rleafValU8{
   724  			base: leaf,
   725  			v:    reflect.ValueOf(rvar.Value).Interface().(*uint8),
   726  		}
   727  	}
   728  }
   729  
   730  func (leaf *rleafValU8) Leaf() Leaf { return leaf.base }
   731  
   732  func (leaf *rleafValU8) Offset() int64 {
   733  	return int64(leaf.base.Offset())
   734  }
   735  
   736  func (leaf *rleafValU8) ivalue() int { return int(*leaf.v) }
   737  
   738  func (leaf *rleafValU8) readFromBuffer(r *rbytes.RBuffer) error {
   739  	*leaf.v = r.ReadU8()
   740  	return r.Err()
   741  }
   742  
   743  var (
   744  	_ rleaf = (*rleafValU8)(nil)
   745  )
   746  
   747  // rleafArrU8 implements rleaf for ROOT TLeafB
   748  type rleafArrU8 struct {
   749  	base *LeafB
   750  	v    []uint8
   751  }
   752  
   753  func (leaf *rleafArrU8) Leaf() Leaf { return leaf.base }
   754  
   755  func (leaf *rleafArrU8) Offset() int64 {
   756  	return int64(leaf.base.Offset())
   757  }
   758  
   759  func (leaf *rleafArrU8) readFromBuffer(r *rbytes.RBuffer) error {
   760  	r.ReadArrayU8(leaf.v)
   761  	return r.Err()
   762  }
   763  
   764  var (
   765  	_ rleaf = (*rleafArrU8)(nil)
   766  )
   767  
   768  // rleafSliU8 implements rleaf for ROOT TLeafB
   769  type rleafSliU8 struct {
   770  	base *LeafB
   771  	n    func() int
   772  	v    *[]uint8
   773  	set  func() // reslice underlying slice
   774  }
   775  
   776  func (leaf *rleafSliU8) Leaf() Leaf { return leaf.base }
   777  
   778  func (leaf *rleafSliU8) Offset() int64 {
   779  	return int64(leaf.base.Offset())
   780  }
   781  
   782  func (leaf *rleafSliU8) readFromBuffer(r *rbytes.RBuffer) error {
   783  	n := leaf.base.tleaf.len * leaf.n()
   784  	sli := rbytes.ResizeU8(*leaf.v, n)
   785  	r.ReadArrayU8(sli)
   786  	*leaf.v = sli
   787  	leaf.set()
   788  	return r.Err()
   789  }
   790  
   791  var (
   792  	_ rleaf = (*rleafSliU8)(nil)
   793  )
   794  
   795  // rleafValU16 implements rleaf for ROOT TLeafS
   796  type rleafValU16 struct {
   797  	base *LeafS
   798  	v    *uint16
   799  }
   800  
   801  func newRLeafU16(leaf *LeafS, rvar ReadVar, rctx rleafCtx) rleaf {
   802  	switch {
   803  	case leaf.count != nil:
   804  		switch len(leaf.Shape()) {
   805  		case 0:
   806  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]uint16)
   807  			if *slice == nil {
   808  				*slice = make([]uint16, 0, rleafDefaultSliceCap)
   809  			}
   810  			return &rleafSliU16{
   811  				base: leaf,
   812  				n:    rctx.rcountFunc(leaf.count.Name()),
   813  				v:    slice,
   814  				set:  func() {},
   815  			}
   816  		default:
   817  			sz := 1
   818  			for _, v := range leaf.Shape() {
   819  				sz *= v
   820  			}
   821  			sli := reflect.ValueOf(rvar.Value).Elem()
   822  			ptr := (*[]uint16)(unsafe.Pointer(sli.UnsafeAddr()))
   823  			hdr := unsafeDecaySliceArray[uint16](ptr, sz)
   824  			if *hdr == nil {
   825  				*hdr = make([]uint16, 0, rleafDefaultSliceCap*sz)
   826  			}
   827  			rleaf := &rleafSliU16{
   828  				base: leaf,
   829  				n:    rctx.rcountFunc(leaf.count.Name()),
   830  				v:    hdr,
   831  			}
   832  			rhdr := reflect.ValueOf(hdr).Elem()
   833  			rptr := reflect.ValueOf(ptr).Elem()
   834  
   835  			// alias slices
   836  			rptr.Set(rhdr)
   837  
   838  			rleaf.set = func() {
   839  				n := rleaf.n()
   840  				rptr.SetLen(n)
   841  			}
   842  
   843  			return rleaf
   844  		}
   845  
   846  	case leaf.len > 1:
   847  		return &rleafArrU16{
   848  			base: leaf,
   849  			v:    *unsafeDecayArray[uint16](rvar.Value),
   850  		}
   851  
   852  	default:
   853  		return &rleafValU16{
   854  			base: leaf,
   855  			v:    reflect.ValueOf(rvar.Value).Interface().(*uint16),
   856  		}
   857  	}
   858  }
   859  
   860  func (leaf *rleafValU16) Leaf() Leaf { return leaf.base }
   861  
   862  func (leaf *rleafValU16) Offset() int64 {
   863  	return int64(leaf.base.Offset())
   864  }
   865  
   866  func (leaf *rleafValU16) ivalue() int { return int(*leaf.v) }
   867  
   868  func (leaf *rleafValU16) readFromBuffer(r *rbytes.RBuffer) error {
   869  	*leaf.v = r.ReadU16()
   870  	return r.Err()
   871  }
   872  
   873  var (
   874  	_ rleaf = (*rleafValU16)(nil)
   875  )
   876  
   877  // rleafArrU16 implements rleaf for ROOT TLeafS
   878  type rleafArrU16 struct {
   879  	base *LeafS
   880  	v    []uint16
   881  }
   882  
   883  func (leaf *rleafArrU16) Leaf() Leaf { return leaf.base }
   884  
   885  func (leaf *rleafArrU16) Offset() int64 {
   886  	return int64(leaf.base.Offset())
   887  }
   888  
   889  func (leaf *rleafArrU16) readFromBuffer(r *rbytes.RBuffer) error {
   890  	r.ReadArrayU16(leaf.v)
   891  	return r.Err()
   892  }
   893  
   894  var (
   895  	_ rleaf = (*rleafArrU16)(nil)
   896  )
   897  
   898  // rleafSliU16 implements rleaf for ROOT TLeafS
   899  type rleafSliU16 struct {
   900  	base *LeafS
   901  	n    func() int
   902  	v    *[]uint16
   903  	set  func() // reslice underlying slice
   904  }
   905  
   906  func (leaf *rleafSliU16) Leaf() Leaf { return leaf.base }
   907  
   908  func (leaf *rleafSliU16) Offset() int64 {
   909  	return int64(leaf.base.Offset())
   910  }
   911  
   912  func (leaf *rleafSliU16) readFromBuffer(r *rbytes.RBuffer) error {
   913  	n := leaf.base.tleaf.len * leaf.n()
   914  	sli := rbytes.ResizeU16(*leaf.v, n)
   915  	r.ReadArrayU16(sli)
   916  	*leaf.v = sli
   917  	leaf.set()
   918  	return r.Err()
   919  }
   920  
   921  var (
   922  	_ rleaf = (*rleafSliU16)(nil)
   923  )
   924  
   925  // rleafValU32 implements rleaf for ROOT TLeafI
   926  type rleafValU32 struct {
   927  	base *LeafI
   928  	v    *uint32
   929  }
   930  
   931  func newRLeafU32(leaf *LeafI, rvar ReadVar, rctx rleafCtx) rleaf {
   932  	switch {
   933  	case leaf.count != nil:
   934  		switch len(leaf.Shape()) {
   935  		case 0:
   936  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]uint32)
   937  			if *slice == nil {
   938  				*slice = make([]uint32, 0, rleafDefaultSliceCap)
   939  			}
   940  			return &rleafSliU32{
   941  				base: leaf,
   942  				n:    rctx.rcountFunc(leaf.count.Name()),
   943  				v:    slice,
   944  				set:  func() {},
   945  			}
   946  		default:
   947  			sz := 1
   948  			for _, v := range leaf.Shape() {
   949  				sz *= v
   950  			}
   951  			sli := reflect.ValueOf(rvar.Value).Elem()
   952  			ptr := (*[]uint32)(unsafe.Pointer(sli.UnsafeAddr()))
   953  			hdr := unsafeDecaySliceArray[uint32](ptr, sz)
   954  			if *hdr == nil {
   955  				*hdr = make([]uint32, 0, rleafDefaultSliceCap*sz)
   956  			}
   957  			rleaf := &rleafSliU32{
   958  				base: leaf,
   959  				n:    rctx.rcountFunc(leaf.count.Name()),
   960  				v:    hdr,
   961  			}
   962  			rhdr := reflect.ValueOf(hdr).Elem()
   963  			rptr := reflect.ValueOf(ptr).Elem()
   964  
   965  			// alias slices
   966  			rptr.Set(rhdr)
   967  
   968  			rleaf.set = func() {
   969  				n := rleaf.n()
   970  				rptr.SetLen(n)
   971  			}
   972  
   973  			return rleaf
   974  		}
   975  
   976  	case leaf.len > 1:
   977  		return &rleafArrU32{
   978  			base: leaf,
   979  			v:    *unsafeDecayArray[uint32](rvar.Value),
   980  		}
   981  
   982  	default:
   983  		return &rleafValU32{
   984  			base: leaf,
   985  			v:    reflect.ValueOf(rvar.Value).Interface().(*uint32),
   986  		}
   987  	}
   988  }
   989  
   990  func (leaf *rleafValU32) Leaf() Leaf { return leaf.base }
   991  
   992  func (leaf *rleafValU32) Offset() int64 {
   993  	return int64(leaf.base.Offset())
   994  }
   995  
   996  func (leaf *rleafValU32) ivalue() int { return int(*leaf.v) }
   997  
   998  func (leaf *rleafValU32) readFromBuffer(r *rbytes.RBuffer) error {
   999  	*leaf.v = r.ReadU32()
  1000  	return r.Err()
  1001  }
  1002  
  1003  var (
  1004  	_ rleaf = (*rleafValU32)(nil)
  1005  )
  1006  
  1007  // rleafArrU32 implements rleaf for ROOT TLeafI
  1008  type rleafArrU32 struct {
  1009  	base *LeafI
  1010  	v    []uint32
  1011  }
  1012  
  1013  func (leaf *rleafArrU32) Leaf() Leaf { return leaf.base }
  1014  
  1015  func (leaf *rleafArrU32) Offset() int64 {
  1016  	return int64(leaf.base.Offset())
  1017  }
  1018  
  1019  func (leaf *rleafArrU32) readFromBuffer(r *rbytes.RBuffer) error {
  1020  	r.ReadArrayU32(leaf.v)
  1021  	return r.Err()
  1022  }
  1023  
  1024  var (
  1025  	_ rleaf = (*rleafArrU32)(nil)
  1026  )
  1027  
  1028  // rleafSliU32 implements rleaf for ROOT TLeafI
  1029  type rleafSliU32 struct {
  1030  	base *LeafI
  1031  	n    func() int
  1032  	v    *[]uint32
  1033  	set  func() // reslice underlying slice
  1034  }
  1035  
  1036  func (leaf *rleafSliU32) Leaf() Leaf { return leaf.base }
  1037  
  1038  func (leaf *rleafSliU32) Offset() int64 {
  1039  	return int64(leaf.base.Offset())
  1040  }
  1041  
  1042  func (leaf *rleafSliU32) readFromBuffer(r *rbytes.RBuffer) error {
  1043  	n := leaf.base.tleaf.len * leaf.n()
  1044  	sli := rbytes.ResizeU32(*leaf.v, n)
  1045  	r.ReadArrayU32(sli)
  1046  	*leaf.v = sli
  1047  	leaf.set()
  1048  	return r.Err()
  1049  }
  1050  
  1051  var (
  1052  	_ rleaf = (*rleafSliU32)(nil)
  1053  )
  1054  
  1055  // rleafValU64 implements rleaf for ROOT TLeafL
  1056  type rleafValU64 struct {
  1057  	base *LeafL
  1058  	v    *uint64
  1059  }
  1060  
  1061  func newRLeafU64(leaf *LeafL, rvar ReadVar, rctx rleafCtx) rleaf {
  1062  	switch {
  1063  	case leaf.count != nil:
  1064  		switch len(leaf.Shape()) {
  1065  		case 0:
  1066  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]uint64)
  1067  			if *slice == nil {
  1068  				*slice = make([]uint64, 0, rleafDefaultSliceCap)
  1069  			}
  1070  			return &rleafSliU64{
  1071  				base: leaf,
  1072  				n:    rctx.rcountFunc(leaf.count.Name()),
  1073  				v:    slice,
  1074  				set:  func() {},
  1075  			}
  1076  		default:
  1077  			sz := 1
  1078  			for _, v := range leaf.Shape() {
  1079  				sz *= v
  1080  			}
  1081  			sli := reflect.ValueOf(rvar.Value).Elem()
  1082  			ptr := (*[]uint64)(unsafe.Pointer(sli.UnsafeAddr()))
  1083  			hdr := unsafeDecaySliceArray[uint64](ptr, sz)
  1084  			if *hdr == nil {
  1085  				*hdr = make([]uint64, 0, rleafDefaultSliceCap*sz)
  1086  			}
  1087  			rleaf := &rleafSliU64{
  1088  				base: leaf,
  1089  				n:    rctx.rcountFunc(leaf.count.Name()),
  1090  				v:    hdr,
  1091  			}
  1092  			rhdr := reflect.ValueOf(hdr).Elem()
  1093  			rptr := reflect.ValueOf(ptr).Elem()
  1094  
  1095  			// alias slices
  1096  			rptr.Set(rhdr)
  1097  
  1098  			rleaf.set = func() {
  1099  				n := rleaf.n()
  1100  				rptr.SetLen(n)
  1101  			}
  1102  
  1103  			return rleaf
  1104  		}
  1105  
  1106  	case leaf.len > 1:
  1107  		return &rleafArrU64{
  1108  			base: leaf,
  1109  			v:    *unsafeDecayArray[uint64](rvar.Value),
  1110  		}
  1111  
  1112  	default:
  1113  		return &rleafValU64{
  1114  			base: leaf,
  1115  			v:    reflect.ValueOf(rvar.Value).Interface().(*uint64),
  1116  		}
  1117  	}
  1118  }
  1119  
  1120  func (leaf *rleafValU64) Leaf() Leaf { return leaf.base }
  1121  
  1122  func (leaf *rleafValU64) Offset() int64 {
  1123  	return int64(leaf.base.Offset())
  1124  }
  1125  
  1126  func (leaf *rleafValU64) ivalue() int { return int(*leaf.v) }
  1127  
  1128  func (leaf *rleafValU64) readFromBuffer(r *rbytes.RBuffer) error {
  1129  	*leaf.v = r.ReadU64()
  1130  	return r.Err()
  1131  }
  1132  
  1133  var (
  1134  	_ rleaf = (*rleafValU64)(nil)
  1135  )
  1136  
  1137  // rleafArrU64 implements rleaf for ROOT TLeafL
  1138  type rleafArrU64 struct {
  1139  	base *LeafL
  1140  	v    []uint64
  1141  }
  1142  
  1143  func (leaf *rleafArrU64) Leaf() Leaf { return leaf.base }
  1144  
  1145  func (leaf *rleafArrU64) Offset() int64 {
  1146  	return int64(leaf.base.Offset())
  1147  }
  1148  
  1149  func (leaf *rleafArrU64) readFromBuffer(r *rbytes.RBuffer) error {
  1150  	r.ReadArrayU64(leaf.v)
  1151  	return r.Err()
  1152  }
  1153  
  1154  var (
  1155  	_ rleaf = (*rleafArrU64)(nil)
  1156  )
  1157  
  1158  // rleafSliU64 implements rleaf for ROOT TLeafL
  1159  type rleafSliU64 struct {
  1160  	base *LeafL
  1161  	n    func() int
  1162  	v    *[]uint64
  1163  	set  func() // reslice underlying slice
  1164  }
  1165  
  1166  func (leaf *rleafSliU64) Leaf() Leaf { return leaf.base }
  1167  
  1168  func (leaf *rleafSliU64) Offset() int64 {
  1169  	return int64(leaf.base.Offset())
  1170  }
  1171  
  1172  func (leaf *rleafSliU64) readFromBuffer(r *rbytes.RBuffer) error {
  1173  	n := leaf.base.tleaf.len * leaf.n()
  1174  	sli := rbytes.ResizeU64(*leaf.v, n)
  1175  	r.ReadArrayU64(sli)
  1176  	*leaf.v = sli
  1177  	leaf.set()
  1178  	return r.Err()
  1179  }
  1180  
  1181  var (
  1182  	_ rleaf = (*rleafSliU64)(nil)
  1183  )
  1184  
  1185  // rleafValF32 implements rleaf for ROOT TLeafF
  1186  type rleafValF32 struct {
  1187  	base *LeafF
  1188  	v    *float32
  1189  }
  1190  
  1191  func newRLeafF32(leaf *LeafF, rvar ReadVar, rctx rleafCtx) rleaf {
  1192  	switch {
  1193  	case leaf.count != nil:
  1194  		switch len(leaf.Shape()) {
  1195  		case 0:
  1196  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]float32)
  1197  			if *slice == nil {
  1198  				*slice = make([]float32, 0, rleafDefaultSliceCap)
  1199  			}
  1200  			return &rleafSliF32{
  1201  				base: leaf,
  1202  				n:    rctx.rcountFunc(leaf.count.Name()),
  1203  				v:    slice,
  1204  				set:  func() {},
  1205  			}
  1206  		default:
  1207  			sz := 1
  1208  			for _, v := range leaf.Shape() {
  1209  				sz *= v
  1210  			}
  1211  			sli := reflect.ValueOf(rvar.Value).Elem()
  1212  			ptr := (*[]float32)(unsafe.Pointer(sli.UnsafeAddr()))
  1213  			hdr := unsafeDecaySliceArray[float32](ptr, sz)
  1214  			if *hdr == nil {
  1215  				*hdr = make([]float32, 0, rleafDefaultSliceCap*sz)
  1216  			}
  1217  			rleaf := &rleafSliF32{
  1218  				base: leaf,
  1219  				n:    rctx.rcountFunc(leaf.count.Name()),
  1220  				v:    hdr,
  1221  			}
  1222  			rhdr := reflect.ValueOf(hdr).Elem()
  1223  			rptr := reflect.ValueOf(ptr).Elem()
  1224  
  1225  			// alias slices
  1226  			rptr.Set(rhdr)
  1227  
  1228  			rleaf.set = func() {
  1229  				n := rleaf.n()
  1230  				rptr.SetLen(n)
  1231  			}
  1232  
  1233  			return rleaf
  1234  		}
  1235  
  1236  	case leaf.len > 1:
  1237  		return &rleafArrF32{
  1238  			base: leaf,
  1239  			v:    *unsafeDecayArray[float32](rvar.Value),
  1240  		}
  1241  
  1242  	default:
  1243  		return &rleafValF32{
  1244  			base: leaf,
  1245  			v:    reflect.ValueOf(rvar.Value).Interface().(*float32),
  1246  		}
  1247  	}
  1248  }
  1249  
  1250  func (leaf *rleafValF32) Leaf() Leaf { return leaf.base }
  1251  
  1252  func (leaf *rleafValF32) Offset() int64 {
  1253  	return int64(leaf.base.Offset())
  1254  }
  1255  
  1256  func (leaf *rleafValF32) readFromBuffer(r *rbytes.RBuffer) error {
  1257  	*leaf.v = r.ReadF32()
  1258  	return r.Err()
  1259  }
  1260  
  1261  var (
  1262  	_ rleaf = (*rleafValF32)(nil)
  1263  )
  1264  
  1265  // rleafArrF32 implements rleaf for ROOT TLeafF
  1266  type rleafArrF32 struct {
  1267  	base *LeafF
  1268  	v    []float32
  1269  }
  1270  
  1271  func (leaf *rleafArrF32) Leaf() Leaf { return leaf.base }
  1272  
  1273  func (leaf *rleafArrF32) Offset() int64 {
  1274  	return int64(leaf.base.Offset())
  1275  }
  1276  
  1277  func (leaf *rleafArrF32) readFromBuffer(r *rbytes.RBuffer) error {
  1278  	r.ReadArrayF32(leaf.v)
  1279  	return r.Err()
  1280  }
  1281  
  1282  var (
  1283  	_ rleaf = (*rleafArrF32)(nil)
  1284  )
  1285  
  1286  // rleafSliF32 implements rleaf for ROOT TLeafF
  1287  type rleafSliF32 struct {
  1288  	base *LeafF
  1289  	n    func() int
  1290  	v    *[]float32
  1291  	set  func() // reslice underlying slice
  1292  }
  1293  
  1294  func (leaf *rleafSliF32) Leaf() Leaf { return leaf.base }
  1295  
  1296  func (leaf *rleafSliF32) Offset() int64 {
  1297  	return int64(leaf.base.Offset())
  1298  }
  1299  
  1300  func (leaf *rleafSliF32) readFromBuffer(r *rbytes.RBuffer) error {
  1301  	n := leaf.base.tleaf.len * leaf.n()
  1302  	sli := rbytes.ResizeF32(*leaf.v, n)
  1303  	r.ReadArrayF32(sli)
  1304  	*leaf.v = sli
  1305  	leaf.set()
  1306  	return r.Err()
  1307  }
  1308  
  1309  var (
  1310  	_ rleaf = (*rleafSliF32)(nil)
  1311  )
  1312  
  1313  // rleafValF64 implements rleaf for ROOT TLeafD
  1314  type rleafValF64 struct {
  1315  	base *LeafD
  1316  	v    *float64
  1317  }
  1318  
  1319  func newRLeafF64(leaf *LeafD, rvar ReadVar, rctx rleafCtx) rleaf {
  1320  	switch {
  1321  	case leaf.count != nil:
  1322  		switch len(leaf.Shape()) {
  1323  		case 0:
  1324  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]float64)
  1325  			if *slice == nil {
  1326  				*slice = make([]float64, 0, rleafDefaultSliceCap)
  1327  			}
  1328  			return &rleafSliF64{
  1329  				base: leaf,
  1330  				n:    rctx.rcountFunc(leaf.count.Name()),
  1331  				v:    slice,
  1332  				set:  func() {},
  1333  			}
  1334  		default:
  1335  			sz := 1
  1336  			for _, v := range leaf.Shape() {
  1337  				sz *= v
  1338  			}
  1339  			sli := reflect.ValueOf(rvar.Value).Elem()
  1340  			ptr := (*[]float64)(unsafe.Pointer(sli.UnsafeAddr()))
  1341  			hdr := unsafeDecaySliceArray[float64](ptr, sz)
  1342  			if *hdr == nil {
  1343  				*hdr = make([]float64, 0, rleafDefaultSliceCap*sz)
  1344  			}
  1345  			rleaf := &rleafSliF64{
  1346  				base: leaf,
  1347  				n:    rctx.rcountFunc(leaf.count.Name()),
  1348  				v:    hdr,
  1349  			}
  1350  			rhdr := reflect.ValueOf(hdr).Elem()
  1351  			rptr := reflect.ValueOf(ptr).Elem()
  1352  
  1353  			// alias slices
  1354  			rptr.Set(rhdr)
  1355  
  1356  			rleaf.set = func() {
  1357  				n := rleaf.n()
  1358  				rptr.SetLen(n)
  1359  			}
  1360  
  1361  			return rleaf
  1362  		}
  1363  
  1364  	case leaf.len > 1:
  1365  		return &rleafArrF64{
  1366  			base: leaf,
  1367  			v:    *unsafeDecayArray[float64](rvar.Value),
  1368  		}
  1369  
  1370  	default:
  1371  		return &rleafValF64{
  1372  			base: leaf,
  1373  			v:    reflect.ValueOf(rvar.Value).Interface().(*float64),
  1374  		}
  1375  	}
  1376  }
  1377  
  1378  func (leaf *rleafValF64) Leaf() Leaf { return leaf.base }
  1379  
  1380  func (leaf *rleafValF64) Offset() int64 {
  1381  	return int64(leaf.base.Offset())
  1382  }
  1383  
  1384  func (leaf *rleafValF64) readFromBuffer(r *rbytes.RBuffer) error {
  1385  	*leaf.v = r.ReadF64()
  1386  	return r.Err()
  1387  }
  1388  
  1389  var (
  1390  	_ rleaf = (*rleafValF64)(nil)
  1391  )
  1392  
  1393  // rleafArrF64 implements rleaf for ROOT TLeafD
  1394  type rleafArrF64 struct {
  1395  	base *LeafD
  1396  	v    []float64
  1397  }
  1398  
  1399  func (leaf *rleafArrF64) Leaf() Leaf { return leaf.base }
  1400  
  1401  func (leaf *rleafArrF64) Offset() int64 {
  1402  	return int64(leaf.base.Offset())
  1403  }
  1404  
  1405  func (leaf *rleafArrF64) readFromBuffer(r *rbytes.RBuffer) error {
  1406  	r.ReadArrayF64(leaf.v)
  1407  	return r.Err()
  1408  }
  1409  
  1410  var (
  1411  	_ rleaf = (*rleafArrF64)(nil)
  1412  )
  1413  
  1414  // rleafSliF64 implements rleaf for ROOT TLeafD
  1415  type rleafSliF64 struct {
  1416  	base *LeafD
  1417  	n    func() int
  1418  	v    *[]float64
  1419  	set  func() // reslice underlying slice
  1420  }
  1421  
  1422  func (leaf *rleafSliF64) Leaf() Leaf { return leaf.base }
  1423  
  1424  func (leaf *rleafSliF64) Offset() int64 {
  1425  	return int64(leaf.base.Offset())
  1426  }
  1427  
  1428  func (leaf *rleafSliF64) readFromBuffer(r *rbytes.RBuffer) error {
  1429  	n := leaf.base.tleaf.len * leaf.n()
  1430  	sli := rbytes.ResizeF64(*leaf.v, n)
  1431  	r.ReadArrayF64(sli)
  1432  	*leaf.v = sli
  1433  	leaf.set()
  1434  	return r.Err()
  1435  }
  1436  
  1437  var (
  1438  	_ rleaf = (*rleafSliF64)(nil)
  1439  )
  1440  
  1441  // rleafValD32 implements rleaf for ROOT TLeafD32
  1442  type rleafValD32 struct {
  1443  	base *LeafD32
  1444  	v    *root.Double32
  1445  	elm  rbytes.StreamerElement
  1446  }
  1447  
  1448  func newRLeafD32(leaf *LeafD32, rvar ReadVar, rctx rleafCtx) rleaf {
  1449  	switch {
  1450  	case leaf.count != nil:
  1451  		switch len(leaf.Shape()) {
  1452  		case 0:
  1453  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]root.Double32)
  1454  			if *slice == nil {
  1455  				*slice = make([]root.Double32, 0, rleafDefaultSliceCap)
  1456  			}
  1457  			return &rleafSliD32{
  1458  				base: leaf,
  1459  				n:    rctx.rcountFunc(leaf.count.Name()),
  1460  				v:    slice,
  1461  				set:  func() {},
  1462  			}
  1463  		default:
  1464  			sz := 1
  1465  			for _, v := range leaf.Shape() {
  1466  				sz *= v
  1467  			}
  1468  			sli := reflect.ValueOf(rvar.Value).Elem()
  1469  			ptr := (*[]root.Double32)(unsafe.Pointer(sli.UnsafeAddr()))
  1470  			hdr := unsafeDecaySliceArray[root.Double32](ptr, sz)
  1471  			if *hdr == nil {
  1472  				*hdr = make([]root.Double32, 0, rleafDefaultSliceCap*sz)
  1473  			}
  1474  			rleaf := &rleafSliD32{
  1475  				base: leaf,
  1476  				n:    rctx.rcountFunc(leaf.count.Name()),
  1477  				v:    hdr,
  1478  			}
  1479  			rhdr := reflect.ValueOf(hdr).Elem()
  1480  			rptr := reflect.ValueOf(ptr).Elem()
  1481  
  1482  			// alias slices
  1483  			rptr.Set(rhdr)
  1484  
  1485  			rleaf.set = func() {
  1486  				n := rleaf.n()
  1487  				rptr.SetLen(n)
  1488  			}
  1489  
  1490  			return rleaf
  1491  		}
  1492  
  1493  	case leaf.len > 1:
  1494  		return &rleafArrD32{
  1495  			base: leaf,
  1496  			v:    *unsafeDecayArray[root.Double32](rvar.Value),
  1497  		}
  1498  
  1499  	default:
  1500  		return &rleafValD32{
  1501  			base: leaf,
  1502  			v:    reflect.ValueOf(rvar.Value).Interface().(*root.Double32),
  1503  		}
  1504  	}
  1505  }
  1506  
  1507  func (leaf *rleafValD32) Leaf() Leaf { return leaf.base }
  1508  
  1509  func (leaf *rleafValD32) Offset() int64 {
  1510  	return int64(leaf.base.Offset())
  1511  }
  1512  
  1513  func (leaf *rleafValD32) readFromBuffer(r *rbytes.RBuffer) error {
  1514  	*leaf.v = r.ReadD32(leaf.elm)
  1515  	return r.Err()
  1516  }
  1517  
  1518  var (
  1519  	_ rleaf = (*rleafValD32)(nil)
  1520  )
  1521  
  1522  // rleafArrD32 implements rleaf for ROOT TLeafD32
  1523  type rleafArrD32 struct {
  1524  	base *LeafD32
  1525  	v    []root.Double32
  1526  	elm  rbytes.StreamerElement
  1527  }
  1528  
  1529  func (leaf *rleafArrD32) Leaf() Leaf { return leaf.base }
  1530  
  1531  func (leaf *rleafArrD32) Offset() int64 {
  1532  	return int64(leaf.base.Offset())
  1533  }
  1534  
  1535  func (leaf *rleafArrD32) readFromBuffer(r *rbytes.RBuffer) error {
  1536  	r.ReadArrayD32(leaf.v, leaf.elm)
  1537  	return r.Err()
  1538  }
  1539  
  1540  var (
  1541  	_ rleaf = (*rleafArrD32)(nil)
  1542  )
  1543  
  1544  // rleafSliD32 implements rleaf for ROOT TLeafD32
  1545  type rleafSliD32 struct {
  1546  	base *LeafD32
  1547  	n    func() int
  1548  	v    *[]root.Double32
  1549  	set  func() // reslice underlying slice
  1550  	elm  rbytes.StreamerElement
  1551  }
  1552  
  1553  func (leaf *rleafSliD32) Leaf() Leaf { return leaf.base }
  1554  
  1555  func (leaf *rleafSliD32) Offset() int64 {
  1556  	return int64(leaf.base.Offset())
  1557  }
  1558  
  1559  func (leaf *rleafSliD32) readFromBuffer(r *rbytes.RBuffer) error {
  1560  	n := leaf.base.tleaf.len * leaf.n()
  1561  	sli := rbytes.ResizeD32(*leaf.v, n)
  1562  	r.ReadArrayD32(sli, leaf.elm)
  1563  	*leaf.v = sli
  1564  	leaf.set()
  1565  	return r.Err()
  1566  }
  1567  
  1568  var (
  1569  	_ rleaf = (*rleafSliD32)(nil)
  1570  )
  1571  
  1572  // rleafValF16 implements rleaf for ROOT TLeafF16
  1573  type rleafValF16 struct {
  1574  	base *LeafF16
  1575  	v    *root.Float16
  1576  	elm  rbytes.StreamerElement
  1577  }
  1578  
  1579  func newRLeafF16(leaf *LeafF16, rvar ReadVar, rctx rleafCtx) rleaf {
  1580  	switch {
  1581  	case leaf.count != nil:
  1582  		switch len(leaf.Shape()) {
  1583  		case 0:
  1584  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]root.Float16)
  1585  			if *slice == nil {
  1586  				*slice = make([]root.Float16, 0, rleafDefaultSliceCap)
  1587  			}
  1588  			return &rleafSliF16{
  1589  				base: leaf,
  1590  				n:    rctx.rcountFunc(leaf.count.Name()),
  1591  				v:    slice,
  1592  				set:  func() {},
  1593  			}
  1594  		default:
  1595  			sz := 1
  1596  			for _, v := range leaf.Shape() {
  1597  				sz *= v
  1598  			}
  1599  			sli := reflect.ValueOf(rvar.Value).Elem()
  1600  			ptr := (*[]root.Float16)(unsafe.Pointer(sli.UnsafeAddr()))
  1601  			hdr := unsafeDecaySliceArray[root.Float16](ptr, sz)
  1602  			if *hdr == nil {
  1603  				*hdr = make([]root.Float16, 0, rleafDefaultSliceCap*sz)
  1604  			}
  1605  			rleaf := &rleafSliF16{
  1606  				base: leaf,
  1607  				n:    rctx.rcountFunc(leaf.count.Name()),
  1608  				v:    hdr,
  1609  			}
  1610  			rhdr := reflect.ValueOf(hdr).Elem()
  1611  			rptr := reflect.ValueOf(ptr).Elem()
  1612  
  1613  			// alias slices
  1614  			rptr.Set(rhdr)
  1615  
  1616  			rleaf.set = func() {
  1617  				n := rleaf.n()
  1618  				rptr.SetLen(n)
  1619  			}
  1620  
  1621  			return rleaf
  1622  		}
  1623  
  1624  	case leaf.len > 1:
  1625  		return &rleafArrF16{
  1626  			base: leaf,
  1627  			v:    *unsafeDecayArray[root.Float16](rvar.Value),
  1628  		}
  1629  
  1630  	default:
  1631  		return &rleafValF16{
  1632  			base: leaf,
  1633  			v:    reflect.ValueOf(rvar.Value).Interface().(*root.Float16),
  1634  		}
  1635  	}
  1636  }
  1637  
  1638  func (leaf *rleafValF16) Leaf() Leaf { return leaf.base }
  1639  
  1640  func (leaf *rleafValF16) Offset() int64 {
  1641  	return int64(leaf.base.Offset())
  1642  }
  1643  
  1644  func (leaf *rleafValF16) readFromBuffer(r *rbytes.RBuffer) error {
  1645  	*leaf.v = r.ReadF16(leaf.elm)
  1646  	return r.Err()
  1647  }
  1648  
  1649  var (
  1650  	_ rleaf = (*rleafValF16)(nil)
  1651  )
  1652  
  1653  // rleafArrF16 implements rleaf for ROOT TLeafF16
  1654  type rleafArrF16 struct {
  1655  	base *LeafF16
  1656  	v    []root.Float16
  1657  	elm  rbytes.StreamerElement
  1658  }
  1659  
  1660  func (leaf *rleafArrF16) Leaf() Leaf { return leaf.base }
  1661  
  1662  func (leaf *rleafArrF16) Offset() int64 {
  1663  	return int64(leaf.base.Offset())
  1664  }
  1665  
  1666  func (leaf *rleafArrF16) readFromBuffer(r *rbytes.RBuffer) error {
  1667  	r.ReadArrayF16(leaf.v, leaf.elm)
  1668  	return r.Err()
  1669  }
  1670  
  1671  var (
  1672  	_ rleaf = (*rleafArrF16)(nil)
  1673  )
  1674  
  1675  // rleafSliF16 implements rleaf for ROOT TLeafF16
  1676  type rleafSliF16 struct {
  1677  	base *LeafF16
  1678  	n    func() int
  1679  	v    *[]root.Float16
  1680  	set  func() // reslice underlying slice
  1681  	elm  rbytes.StreamerElement
  1682  }
  1683  
  1684  func (leaf *rleafSliF16) Leaf() Leaf { return leaf.base }
  1685  
  1686  func (leaf *rleafSliF16) Offset() int64 {
  1687  	return int64(leaf.base.Offset())
  1688  }
  1689  
  1690  func (leaf *rleafSliF16) readFromBuffer(r *rbytes.RBuffer) error {
  1691  	n := leaf.base.tleaf.len * leaf.n()
  1692  	sli := rbytes.ResizeF16(*leaf.v, n)
  1693  	r.ReadArrayF16(sli, leaf.elm)
  1694  	*leaf.v = sli
  1695  	leaf.set()
  1696  	return r.Err()
  1697  }
  1698  
  1699  var (
  1700  	_ rleaf = (*rleafSliF16)(nil)
  1701  )
  1702  
  1703  // rleafValStr implements rleaf for ROOT TLeafC
  1704  type rleafValStr struct {
  1705  	base *LeafC
  1706  	v    *string
  1707  }
  1708  
  1709  func newRLeafStr(leaf *LeafC, rvar ReadVar, rctx rleafCtx) rleaf {
  1710  	switch {
  1711  	case leaf.count != nil:
  1712  		switch len(leaf.Shape()) {
  1713  		case 0:
  1714  			slice := reflect.ValueOf(rvar.Value).Interface().(*[]string)
  1715  			if *slice == nil {
  1716  				*slice = make([]string, 0, rleafDefaultSliceCap)
  1717  			}
  1718  			return &rleafSliStr{
  1719  				base: leaf,
  1720  				n:    rctx.rcountFunc(leaf.count.Name()),
  1721  				v:    slice,
  1722  				set:  func() {},
  1723  			}
  1724  		default:
  1725  			sz := 1
  1726  			for _, v := range leaf.Shape() {
  1727  				sz *= v
  1728  			}
  1729  			sli := reflect.ValueOf(rvar.Value).Elem()
  1730  			ptr := (*[]string)(unsafe.Pointer(sli.UnsafeAddr()))
  1731  			hdr := unsafeDecaySliceArray[string](ptr, sz)
  1732  			if *hdr == nil {
  1733  				*hdr = make([]string, 0, rleafDefaultSliceCap*sz)
  1734  			}
  1735  			rleaf := &rleafSliStr{
  1736  				base: leaf,
  1737  				n:    rctx.rcountFunc(leaf.count.Name()),
  1738  				v:    hdr,
  1739  			}
  1740  			rhdr := reflect.ValueOf(hdr).Elem()
  1741  			rptr := reflect.ValueOf(ptr).Elem()
  1742  
  1743  			// alias slices
  1744  			rptr.Set(rhdr)
  1745  
  1746  			rleaf.set = func() {
  1747  				n := rleaf.n()
  1748  				rptr.SetLen(n)
  1749  			}
  1750  
  1751  			return rleaf
  1752  		}
  1753  
  1754  	case leaf.len > 1:
  1755  		return &rleafArrStr{
  1756  			base: leaf,
  1757  			v:    *unsafeDecayArray[string](rvar.Value),
  1758  		}
  1759  
  1760  	default:
  1761  		return &rleafValStr{
  1762  			base: leaf,
  1763  			v:    reflect.ValueOf(rvar.Value).Interface().(*string),
  1764  		}
  1765  	}
  1766  }
  1767  
  1768  func (leaf *rleafValStr) Leaf() Leaf { return leaf.base }
  1769  
  1770  func (leaf *rleafValStr) Offset() int64 {
  1771  	return int64(leaf.base.Offset())
  1772  }
  1773  
  1774  func (leaf *rleafValStr) readFromBuffer(r *rbytes.RBuffer) error {
  1775  	*leaf.v = r.ReadString()
  1776  	return r.Err()
  1777  }
  1778  
  1779  var (
  1780  	_ rleaf = (*rleafValStr)(nil)
  1781  )
  1782  
  1783  // rleafArrStr implements rleaf for ROOT TLeafC
  1784  type rleafArrStr struct {
  1785  	base *LeafC
  1786  	v    []string
  1787  }
  1788  
  1789  func (leaf *rleafArrStr) Leaf() Leaf { return leaf.base }
  1790  
  1791  func (leaf *rleafArrStr) Offset() int64 {
  1792  	return int64(leaf.base.Offset())
  1793  }
  1794  
  1795  func (leaf *rleafArrStr) readFromBuffer(r *rbytes.RBuffer) error {
  1796  	r.ReadArrayString(leaf.v)
  1797  	return r.Err()
  1798  }
  1799  
  1800  var (
  1801  	_ rleaf = (*rleafArrStr)(nil)
  1802  )
  1803  
  1804  // rleafSliStr implements rleaf for ROOT TLeafC
  1805  type rleafSliStr struct {
  1806  	base *LeafC
  1807  	n    func() int
  1808  	v    *[]string
  1809  	set  func() // reslice underlying slice
  1810  }
  1811  
  1812  func (leaf *rleafSliStr) Leaf() Leaf { return leaf.base }
  1813  
  1814  func (leaf *rleafSliStr) Offset() int64 {
  1815  	return int64(leaf.base.Offset())
  1816  }
  1817  
  1818  func (leaf *rleafSliStr) readFromBuffer(r *rbytes.RBuffer) error {
  1819  	n := leaf.base.tleaf.len * leaf.n()
  1820  	sli := rbytes.ResizeStr(*leaf.v, n)
  1821  	r.ReadArrayString(sli)
  1822  	*leaf.v = sli
  1823  	leaf.set()
  1824  	return r.Err()
  1825  }
  1826  
  1827  var (
  1828  	_ rleaf = (*rleafSliStr)(nil)
  1829  )