void write()

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