FArchive& operator<<( FArchive& Ar, FObjectExport& E )
{
	Ar << E.ClassIndex;
	Ar << E.SuperIndex;
	Ar << E.OuterIndex;
	Ar << E.ObjectName;

	if (Ar.UE4Ver() < VER_UE4_REMOVE_ARCHETYPE_INDEX_FROM_LINKER_TABLES)
	{
		FPackageIndex OldArchetypeIndex;
		Ar << OldArchetypeIndex;	
	}

	uint32 Save = E.ObjectFlags & RF_Load;
	Ar << Save;
	if (Ar.IsLoading())
	{
		E.ObjectFlags = EObjectFlags(Save & RF_Load);
	}

	Ar << E.SerialSize;
	Ar << E.SerialOffset;

	Ar << E.bForcedExport;
	Ar << E.bNotForClient;
	Ar << E.bNotForServer;

	if (Ar.UE4Ver() < VER_UE4_REMOVE_NET_INDEX)
	{
		TArray<int32>		OldGenerationNetObjectCount;
		Ar << OldGenerationNetObjectCount;
	}
	Ar << E.PackageGuid;
	Ar << E.PackageFlags;

	if (Ar.UE4Ver() >= VER_UE4_LOAD_FOR_EDITOR_GAME)
	{
		Ar << E.bNotForEditorGame;
	}

	return Ar;
}
void GetObjectsWithAnyMarks(TArray<UObject *>& Results, EObjectMark Marks)
{
	// We don't want to return any objects that are currently being background loaded unless we're using the object iterator during async loading.
	EObjectFlags ExclusionFlags = RF_Unreachable;
	if (!IsInAsyncLoadingThread())
	{
		ExclusionFlags = EObjectFlags(ExclusionFlags | RF_AsyncLoading);
	}
	const TMap<const UObjectBase *, FObjectMark>& Map = MarkAnnotation.GetAnnotationMap();
	Results.Empty(Map.Num());
	for (TMap<const UObjectBase *, FObjectMark>::TConstIterator It(Map); It; ++It)
	{
		if (It.Value().Marks & Marks)
		{
			UObject* Item = (UObject*)It.Key();
			if (!Item->HasAnyFlags(ExclusionFlags))
			{
				Results.Add(Item);
			}
		}
	}
}
  //---------------------------------------------------------------------------------------
  // !new constructor - creates new object
  void mthd_ctor_new(SkInvokedMethod * scope_p, SkInstance ** result_pp)
    {
    UObject * outer_p = scope_p->get_arg<SkUEEntity>(SkArg_1);
    FName name = scope_p->get_arg<SkUEName>(SkArg_2);
    uint32_t flags = scope_p->get_arg<SkInteger>(SkArg_3);
    
    // The scope of a constructor is always some form of an SkInstance
    SkInstance * receiver_p = static_cast<SkInstance *>(scope_p->m_scope_p.get_obj());

    UClass * ue_class_p = SkUEClassBindingHelper::get_ue_class_from_sk_class(receiver_p->get_class());
    SK_ASSERTX(ue_class_p, a_cstr_format("The UE4 equivalent of class type '%s' is not known to SkookumScript. Maybe it is the class of a Blueprint that is not loaded yet?", receiver_p->get_class()->get_name_cstr_dbg()));
    scope_p->get_this()->construct<SkUEEntity>(NewObject<UObject>(outer_p, ue_class_p, name, EObjectFlags(flags)));
    }
UObjectBase* FObjectBaseArchiveProxy::CreateObjectBase(const FUHTMakefile& UHTMakefile) const
{
	UObjectBase* ObjectBase = new UObjectBase(nullptr, EObjectFlags(ObjectFlagsUint32), EInternalObjectFlags::Native, nullptr, Name.CreateName(UHTMakefile));
	PostConstruct(ObjectBase);
	return ObjectBase;
}