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 )