| 714 | }; |
| 715 | |
| 716 | void Variant::reference(const Variant &p_variant) { |
| 717 | using PackedArrayCreate = PackedArrayRefBase *(*)(); |
| 718 | |
| 719 | static const std::array< |
| 720 | PackedArrayCreate, |
| 721 | Variant::VARIANT_MAX - Variant::PACKED_BYTE_ARRAY> |
| 722 | PACKED_ARRAY_CREATE_TBL = { |
| 723 | packedArrayCreate<uint8_t>, |
| 724 | packedArrayCreate<int32_t>, |
| 725 | packedArrayCreate<int64_t>, |
| 726 | packedArrayCreate<float>, |
| 727 | packedArrayCreate<double>, |
| 728 | packedArrayCreate<String>, |
| 729 | packedArrayCreate<Vector2>, |
| 730 | packedArrayCreate<Vector3>, |
| 731 | packedArrayCreate<Color>, |
| 732 | packedArrayCreate<Vector4>, |
| 733 | }; |
| 734 | void *dst; |
| 735 | void *src; |
| 736 | if (type == OBJECT && p_variant.type == OBJECT) { |
| 737 | _get_obj().ref(p_variant._get_obj(), is_weak_ref, p_variant.is_weak_ref); |
| 738 | return; |
| 739 | } |
| 740 | clear(); |
| 741 | type = p_variant.type; |
| 742 | switch (p_variant.type) { |
| 743 | case TRANSFORM2D: |
| 744 | case AABB: |
| 745 | case BASIS: |
| 746 | case TRANSFORM3D: |
| 747 | case PROJECTION: |
| 748 | _data._ptr = BUCKET_ALLOC_FN_TBL[p_variant.type](BUCKET_TBL[p_variant.type]); |
| 749 | dst = _data._ptr; |
| 750 | src = p_variant._data._ptr; |
| 751 | break; |
| 752 | case OBJECT: |
| 753 | memnew_placement(_data._mem, ObjData); |
| 754 | _get_obj().ref(p_variant._get_obj(), is_weak_ref, p_variant.is_weak_ref); |
| 755 | [[fallthrough]]; |
| 756 | case NIL: |
| 757 | return; |
| 758 | case PACKED_BYTE_ARRAY: |
| 759 | case PACKED_INT32_ARRAY: |
| 760 | case PACKED_INT64_ARRAY: |
| 761 | case PACKED_FLOAT32_ARRAY: |
| 762 | case PACKED_FLOAT64_ARRAY: |
| 763 | case PACKED_STRING_ARRAY: |
| 764 | case PACKED_VECTOR2_ARRAY: |
| 765 | case PACKED_VECTOR3_ARRAY: |
| 766 | case PACKED_COLOR_ARRAY: |
| 767 | case PACKED_VECTOR4_ARRAY: |
| 768 | _data.packed_array = (p_variant._data.packed_array)->reference(); |
| 769 | if (!_data.packed_array) { |
| 770 | _data.packed_array = PACKED_ARRAY_CREATE_TBL[p_variant.type - PACKED_BYTE_ARRAY](); |
| 771 | } |
| 772 | return; |
| 773 | default: |
no test coverage detected