MCPcopy Create free account
hub / github.com/apache/fory / read_union_value_data

Function read_union_value_data

cpp/fory/serialization/union_serializer.h:843–889  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

841
842template <typename T>
843inline T read_union_value_data(ReadContext &ctx, uint32_t type_id) {
844 using Inner = union_unwrap_optional_inner_t<T>;
845 Inner value{};
846 if constexpr (std::is_integral_v<Inner> || std::is_enum_v<Inner>) {
847 switch (static_cast<TypeId>(type_id)) {
848 case TypeId::VAR_UINT32:
849 value = static_cast<Inner>(ctx.read_var_uint32(ctx.error()));
850 break;
851 case TypeId::UINT32:
852 value = static_cast<Inner>(ctx.read_uint32(ctx.error()));
853 break;
854 case TypeId::VAR_UINT64:
855 value = static_cast<Inner>(ctx.read_var_uint64(ctx.error()));
856 break;
857 case TypeId::UINT64:
858 value = static_cast<Inner>(ctx.read_uint64(ctx.error()));
859 break;
860 case TypeId::TAGGED_UINT64:
861 value = static_cast<Inner>(ctx.read_tagged_uint64(ctx.error()));
862 break;
863 case TypeId::VARINT32:
864 value = static_cast<Inner>(ctx.read_var_int32(ctx.error()));
865 break;
866 case TypeId::INT32:
867 value = static_cast<Inner>(ctx.read_int32(ctx.error()));
868 break;
869 case TypeId::VARINT64:
870 value = static_cast<Inner>(ctx.read_var_int64(ctx.error()));
871 break;
872 case TypeId::INT64:
873 value = static_cast<Inner>(ctx.read_int64(ctx.error()));
874 break;
875 case TypeId::TAGGED_INT64:
876 value = static_cast<Inner>(ctx.read_tagged_int64(ctx.error()));
877 break;
878 default:
879 value = Serializer<Inner>::read_data(ctx);
880 break;
881 }
882 } else {
883 value = Serializer<Inner>::read_data(ctx);
884 }
885 if (FORY_PREDICT_FALSE(ctx.has_error())) {
886 return default_union_case_value<T>();
887 }
888 return wrap_union_case_value<T>(std::move(value));
889}
890
891template <typename T, typename F, size_t Index = 0>
892inline bool dispatch_union_case(uint32_t case_id, F &&fn) {

Callers

nothing calls this directly

Calls 13

read_dataFunction · 0.85
errorMethod · 0.65
read_var_uint32Method · 0.45
read_uint32Method · 0.45
read_var_uint64Method · 0.45
read_uint64Method · 0.45
read_tagged_uint64Method · 0.45
read_var_int32Method · 0.45
read_int32Method · 0.45
read_var_int64Method · 0.45
read_int64Method · 0.45
read_tagged_int64Method · 0.45

Tested by

no test coverage detected