FClassArchiveProxy::FClassArchiveProxy(FUHTMakefile& UHTMakefile, const UClass* Class)
    : FStructArchiveProxy(UHTMakefile, Class)
{
    ClassUnique = Class->ClassUnique;
    ClassFlags = Class->ClassFlags;
    ClassCastFlags = Class->ClassCastFlags;
    ClassWithinIndex = UHTMakefile.GetClassIndex(Class->ClassWithin);
    ClassGeneratedByIndex = UHTMakefile.GetObjectIndex(Class->ClassGeneratedBy);
    ClassConfigName = FNameArchiveProxy(UHTMakefile, Class->ClassConfigName);
    bCooked = Class->bCooked;
    ClassReps.Empty(Class->ClassReps.Num());
    for (FRepRecord RepRecord : Class->ClassReps)
    {
        ClassReps.Add(FRepRecordArchiveProxy(UHTMakefile, RepRecord));
    }

    NetFields.Empty(Class->NetFields.Num());
    for (UField* Field : Class->NetFields)
    {
        NetFields.Add(UHTMakefile.GetFieldIndex(Field));
    }

    FuncMap.Empty(Class->FuncMap.Num());
    for (auto& Kvp : Class->FuncMap)
    {
        FuncMap.Add(TPairInitializer<FNameArchiveProxy, int32>(FNameArchiveProxy(UHTMakefile, Kvp.Key), UHTMakefile.GetFunctionIndex(Kvp.Value)));
    }

    Interfaces.Empty(Class->Interfaces.Num());
    for (FImplementedInterface ImplementedInterface : Class->Interfaces)
    {
        Interfaces.Add(FImplementedInterfaceArchiveProxy(UHTMakefile, ImplementedInterface));
    }
}
FObjectBaseArchiveProxy::FObjectBaseArchiveProxy(FUHTMakefile& UHTMakefile, const UObjectBase* ObjectBase)
{
	ObjectFlagsUint32 = static_cast<uint32>(ObjectBase->ObjectFlags);
	ClassIndex = UHTMakefile.GetClassIndex(ObjectBase->Class);
	Name = FNameArchiveProxy(UHTMakefile, ObjectBase->Name);
	OuterIndex = UHTMakefile.GetObjectIndex(ObjectBase->Outer);
}