in cppwinrt/type_writers.h [267:353]
void write(TypeDef const& type)
{
add_depends(type);
auto ns = type.TypeNamespace();
auto name = type.TypeName();
auto generics = type.GenericParam();
if (!empty(generics))
{
write("winrt::@::%<%>", ns, remove_tick(name), bind_list(", ", generics));
return;
}
// TODO: get rid of all these renames once parity with cppwinrt.exe has been reached...
if (name == "EventRegistrationToken" && ns == "Windows.Foundation")
{
write("winrt::event_token");
}
else if (name == "HResult" && ns == "Windows.Foundation")
{
write("winrt::hresult");
}
else if (abi_types)
{
auto category = get_category(type);
if (ns == "Windows.Foundation.Numerics")
{
if (name == "Matrix3x2") { name = "float3x2"; }
else if (name == "Matrix4x4") { name = "float4x4"; }
else if (name == "Plane") { name = "plane"; }
else if (name == "Quaternion") { name = "quaternion"; }
else if (name == "Vector2") { name = "float2"; }
else if (name == "Vector3") { name = "float3"; }
else if (name == "Vector4") { name = "float4"; }
write("winrt::@::%", ns, name);
}
else if (category == category::struct_type)
{
if ((name == "DateTime" || name == "TimeSpan") && ns == "Windows.Foundation")
{
write("int64_t");
}
else if ((name == "Point" || name == "Size" || name == "Rect") && ns == "Windows.Foundation")
{
write("winrt::@::%", ns, name);
}
else if (delegate_types)
{
write("struct impl::struct_%_%", get_impl_name(ns), name);
}
else
{
write("struct struct_%_%", get_impl_name(ns), name);
}
}
else if (category == category::enum_type)
{
write(type.FieldList().first.Signature().Type());
}
else
{
write("void*");
}
}
else
{
if (ns == "Windows.Foundation.Numerics")
{
if (name == "Matrix3x2") { name = "float3x2"; }
else if (name == "Matrix4x4") { name = "float4x4"; }
else if (name == "Plane") { name = "plane"; }
else if (name == "Quaternion") { name = "quaternion"; }
else if (name == "Vector2") { name = "float2"; }
else if (name == "Vector3") { name = "float3"; }
else if (name == "Vector4") { name = "float4"; }
write("winrt::@::%", ns, name);
}
else
{
write("winrt::@::%", ns, name);
}
}
}