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.");
}
}