static void ParseDmlScalarUnion()

in DxDispatch/src/model/JsonParsers.cpp [666:706]


static void ParseDmlScalarUnion(const rapidjson::Value& value, DML_TENSOR_DATA_TYPE dataType, DML_SCALAR_UNION& returnValue)
{
    if (value.IsObject())
    {
        switch (dataType)
        {
        case DML_TENSOR_DATA_TYPE_FLOAT32: returnValue.Float32 = ParseFloat32Field(value, "Float32"); break;
        case DML_TENSOR_DATA_TYPE_FLOAT64: returnValue.Float64 = ParseFloat64Field(value, "Float64"); break;
        case DML_TENSOR_DATA_TYPE_UINT8: returnValue.UInt8 = ParseUInt8Field(value, "UInt8"); break;
        case DML_TENSOR_DATA_TYPE_UINT16: returnValue.UInt16 = ParseUInt16Field(value, "UInt16"); break;
        case DML_TENSOR_DATA_TYPE_UINT32: returnValue.UInt32 = ParseUInt32Field(value, "UInt32"); break;
        case DML_TENSOR_DATA_TYPE_UINT64: returnValue.UInt64 = ParseUInt64Field(value, "UInt64"); break;
        case DML_TENSOR_DATA_TYPE_INT8: returnValue.Int8 = ParseInt8Field(value, "Int8"); break;
        case DML_TENSOR_DATA_TYPE_INT16: returnValue.Int16 = ParseInt16Field(value, "Int16"); break;
        case DML_TENSOR_DATA_TYPE_INT32: returnValue.Int32 = ParseInt32Field(value, "Int32"); break;
        case DML_TENSOR_DATA_TYPE_INT64: returnValue.Int64 = ParseInt64Field(value, "Int64"); break;
        default: throw std::invalid_argument("Data type not supported for DML_SCALAR_UNION.");
        }
    }
    else if (value.IsNumber())
    {
        switch (dataType)
        {
        case DML_TENSOR_DATA_TYPE_FLOAT32: returnValue.Float32 = ParseFloat32(value); break;
        case DML_TENSOR_DATA_TYPE_FLOAT64: returnValue.Float64 = ParseFloat64(value); break;
        case DML_TENSOR_DATA_TYPE_UINT8: returnValue.UInt8 = ParseUInt8(value); break;
        case DML_TENSOR_DATA_TYPE_UINT16: returnValue.UInt16 = ParseUInt16(value); break;
        case DML_TENSOR_DATA_TYPE_UINT32: returnValue.UInt32 = ParseUInt32(value); break;
        case DML_TENSOR_DATA_TYPE_UINT64: returnValue.UInt64 = ParseUInt64(value); break;
        case DML_TENSOR_DATA_TYPE_INT8: returnValue.Int8 = ParseInt8(value); break;
        case DML_TENSOR_DATA_TYPE_INT16: returnValue.Int16 = ParseInt16(value); break;
        case DML_TENSOR_DATA_TYPE_INT32: returnValue.Int32 = ParseInt32(value); break;
        case DML_TENSOR_DATA_TYPE_INT64: returnValue.Int64 = ParseInt64(value); break;
        default: throw std::invalid_argument("Data type not supported for DML_SCALAR_UNION.");
        }
    }
    else
    {
        throw std::invalid_argument("Expected a non-null JSON object or number.");
    }
}