FExportObjectInnerContext::FExportObjectInnerContext(TArray<UObject*>& ObjsToIgnore)
{
    // For each object . . .
    for (UObject* InnerObj : TObjectRange<UObject>(RF_ClassDefaultObject | RF_PendingKill))
    {
        if (!ObjsToIgnore.Contains(InnerObj))
        {
            UObject* OuterObj = InnerObj->GetOuter();
            if (OuterObj && !OuterObj->IsPendingKill())
            {
                InnerList* Inners = ObjectToInnerMap.Find(OuterObj);
                if (Inners)
                {
                    // Add object to existing inner list.
                    Inners->Add(InnerObj);
                }
                else
                {
                    // Create a new inner list for the outer object.
                    InnerList& InnersForOuterObject = ObjectToInnerMap.Add(OuterObj, InnerList());
                    InnersForOuterObject.Add(InnerObj);
                }
            }
        }
    }
}
FExportObjectInnerContext::FExportObjectInnerContext(TArray<UObject*>& ObjsToIgnore)
{
	// For each object . . .
	for ( TObjectIterator<UObject> It ; It ; ++It )
	{
		UObject* InnerObj = *It;
		if ( !InnerObj->IsPendingKill() )
		{
			if ( !ObjsToIgnore.Contains(InnerObj) )
			{
				UObject* OuterObj = InnerObj->GetOuter();
				if ( OuterObj && !OuterObj->IsPendingKill() )
				{
					InnerList* Inners = ObjectToInnerMap.Find( OuterObj );
					if ( Inners )
					{
						// Add object to existing inner list.
						Inners->Add( InnerObj );
					}
					else
					{
						// Create a new inner list for the outer object.
						InnerList& InnersForOuterObject = ObjectToInnerMap.Add( OuterObj, InnerList() );
						InnersForOuterObject.Add( InnerObj );
					}
				}
			}
		}
	}
}
FExportObjectInnerContext::FExportObjectInnerContext()
{
	// For each object . . .
	for (UObject* InnerObj : TObjectRange<UObject>(RF_ClassDefaultObject, true, EInternalObjectFlags::PendingKill))
	{
		UObject* OuterObj = InnerObj->GetOuter();
		if ( OuterObj )
		{
			InnerList* Inners = ObjectToInnerMap.Find( OuterObj );
			if ( Inners )
			{
				// Add object to existing inner list.
				Inners->Add( InnerObj );
			}
			else
			{
				// Create a new inner list for the outer object.
				InnerList& InnersForOuterObject = ObjectToInnerMap.Add( OuterObj, InnerList() );
				InnersForOuterObject.Add( InnerObj );
			}
		}
	}
}
FExportObjectInnerContext::FExportObjectInnerContext()
{
	// For each object . . .
	for ( TObjectIterator<UObject> It ; It ; ++It )
	{
		UObject* InnerObj = *It;
		UObject* OuterObj = InnerObj->GetOuter();
		if ( OuterObj )
		{
			InnerList* Inners = ObjectToInnerMap.Find( OuterObj );
			if ( Inners )
			{
				// Add object to existing inner list.
				Inners->Add( InnerObj );
			}
			else
			{
				// Create a new inner list for the outer object.
				InnerList& InnersForOuterObject = ObjectToInnerMap.Add( OuterObj, InnerList() );
				InnersForOuterObject.Add( InnerObj );
			}
		}
	}
}