private void LoadDependencies(FAssetRegistryArchive Ar) { foreach (var dependsNode in PreallocatedDependsNodeDataBuffers) { dependsNode.SerializeLoad(Ar, PreallocatedDependsNodeDataBuffers); } }
public FAssetPackageData(FAssetRegistryArchive Ar, bool serializeHash) { PackageName = Ar.ReadFName(); DiskSize = Ar.Read <long>(); PackageGuid = Ar.Read <FGuid>(); CookedHash = serializeHash ? new FMD5Hash(Ar) : null; }
private void LoadDependencies_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version) { foreach (var dependsNode in PreallocatedDependsNodeDataBuffers) { dependsNode.SerializeLoad_BeforeFlags(Ar, version, PreallocatedDependsNodeDataBuffers); } }
private void Load(FAssetRegistryArchive Ar, FAssetRegistryVersionType version) { PreallocatedAssetDataBuffers = Ar.ReadArray(() => new FAssetData(Ar)); if (version < FAssetRegistryVersionType.AddedDependencyFlags) { var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = Ar.ReadArray(localNumDependsNodes, () => new FDependsNode()); if (localNumDependsNodes > 0) { LoadDependencies_BeforeFlags(Ar, version); } } else { var dependencySectionSize = Ar.Read <long>(); var dependencySectionEnd = Ar.Position + dependencySectionSize; var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = Ar.ReadArray(localNumDependsNodes, () => new FDependsNode()); if (localNumDependsNodes > 0) { LoadDependencies(Ar); } Ar.Seek(dependencySectionEnd, SeekOrigin.Begin); } var serializeHash = version < FAssetRegistryVersionType.AddedCookedMD5Hash; PreallocatedPackageDataBuffers = Ar.ReadArray(() => new FAssetPackageData(Ar, serializeHash)); }
public FAssetPackageData(FAssetRegistryArchive Ar, FAssetRegistryVersionType version) { PackageName = Ar.ReadFName(); DiskSize = Ar.Read <long>(); PackageGuid = Ar.Read <FGuid>(); if (version >= FAssetRegistryVersionType.AddedCookedMD5Hash) { CookedHash = new FMD5Hash(Ar); } if (version >= FAssetRegistryVersionType.WorkspaceDomain) { if (version >= FAssetRegistryVersionType.PackageFileSummaryVersionChange) { FileVersionUE = Ar.Read <FPackageFileVersion>(); } else { var ue4Version = Ar.Read <int>(); FileVersionUE = FPackageFileVersion.CreateUE4Version(ue4Version); } FileVersionLicenseeUE = Ar.Read <int>(); Flags = Ar.Read <uint>(); CustomVersions = Ar.ReadArray <FCustomVersion>(); } if (version >= FAssetRegistryVersionType.PackageImportedClasses) { ImportedClasses = Ar.ReadArray(Ar.ReadFName); } }
public FAssetData(FAssetRegistryArchive Ar) { ObjectPath = Ar.ReadFName(); PackagePath = Ar.ReadFName(); AssetClass = Ar.ReadFName(); PackageName = Ar.ReadFName(); AssetName = Ar.ReadFName(); Ar.SerializeTagsAndBundles(this); ChunkIDs = Ar.ReadArray <int>(); PackageFlag = Ar.Read <uint>(); }
private void LoadDependencies(FAssetRegistryArchive Ar) { FDependsNode?GetNodeFromSerializeIndex(int index) { if (index < 0 || PreallocatedDependsNodeDataBuffers.Length <= index) { return(null); } return(PreallocatedDependsNodeDataBuffers[index]); } foreach (var dependsNode in PreallocatedDependsNodeDataBuffers) { dependsNode.SerializeLoad(Ar, GetNodeFromSerializeIndex); } }
public FAssetIdentifier(FAssetRegistryArchive Ar) { var fieldBits = Ar.ReadByte(); if ((fieldBits & (1 << 0)) != 0) { PackageName = Ar.ReadFName(); } if ((fieldBits & (1 << 1)) != 0) { PrimaryAssetType = Ar.ReadFName(); } if ((fieldBits & (1 << 2)) != 0) { ObjectName = Ar.ReadFName(); } if ((fieldBits & (1 << 3)) != 0) { ValueName = Ar.ReadFName(); } }
public void SerializeLoad_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version, FDependsNode[] a) { Identifier = new FAssetIdentifier(Ar); var numHard = Ar.Read <int>(); var numSoft = Ar.Read <int>(); var numName = Ar.Read <int>(); var numSoftManage = Ar.Read <int>(); var numHardManage = version >= FAssetRegistryVersionType.AddedHardManage ? Ar.Read <int>() : 0; var numReferencers = Ar.Read <int>(); PackageDependencies = new List <FDependsNode>(numHard + numSoft); NameDependencies = new List <FDependsNode>(numName); ManageDependencies = new List <FDependsNode>(numSoftManage + numHardManage); Referencers = new List <FDependsNode>(numReferencers); void SerializeNodeArray(int num, ref List <FDependsNode> dependencies) { for (var i = 0; i < num; i++) { var index = Ar.Read <int>(); if (index < 0 || index >= a.Length) { throw new ParserException(""); } var dependsNodes = a[index]; dependencies.Add(dependsNodes); } } SerializeNodeArray(numHard, ref PackageDependencies); SerializeNodeArray(numSoft, ref PackageDependencies); SerializeNodeArray(numName, ref NameDependencies); SerializeNodeArray(numSoftManage, ref ManageDependencies); SerializeNodeArray(numHardManage, ref ManageDependencies); SerializeNodeArray(numReferencers, ref Referencers); }
public void SerializeLoad_BeforeFlags(FAssetRegistryArchive Ar, FAssetRegistryVersionType version, FDependsNode[] preallocatedDependsNodeDataBuffer) { Identifier = new FAssetIdentifier(Ar); var numHard = Ar.Read <int>(); var numSoft = Ar.Read <int>(); var numName = Ar.Read <int>(); var numSoftManage = Ar.Read <int>(); var numHardManage = version >= FAssetRegistryVersionType.AddedHardManage ? Ar.Read <int>() : 0; var numReferencers = Ar.Read <int>(); PackageDependencies = new List <FDependsNode>(numHard + numSoft); NameDependencies = new List <FDependsNode>(numName); ManageDependencies = new List <FDependsNode>(numSoftManage + numHardManage); Referencers = new List <FDependsNode>(numReferencers); void SerializeNodeArray(int num, ref List <FDependsNode> outNodes) { for (var dependencyIndex = 0; dependencyIndex < num; ++dependencyIndex) { var index = Ar.Read <int>(); if (index < 0 || index >= preallocatedDependsNodeDataBuffer.Length) { throw new ParserException($"Index {index} doesn't exist in 'PreallocatedDependsNodeDataBuffers'"); } var dependsNode = preallocatedDependsNodeDataBuffer[index]; outNodes.Add(dependsNode); } } SerializeNodeArray(numHard, ref PackageDependencies); SerializeNodeArray(numSoft, ref PackageDependencies); SerializeNodeArray(numName, ref NameDependencies); SerializeNodeArray(numSoftManage, ref ManageDependencies); SerializeNodeArray(numHardManage, ref ManageDependencies); SerializeNodeArray(numReferencers, ref Referencers); }
private void Load(FAssetRegistryArchive Ar, FAssetRegistryVersionType version) { PreallocatedAssetDataBuffers = Ar.ReadArray(() => new FAssetData(Ar)); if (version < FAssetRegistryVersionType.AddedDependencyFlags) { var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = new FDependsNode[localNumDependsNodes]; for (int i = 0; i < localNumDependsNodes; i++) { PreallocatedDependsNodeDataBuffers[i] = new FDependsNode(i); } if (localNumDependsNodes > 0) { LoadDependencies_BeforeFlags(Ar, version); } } else { var dependencySectionSize = Ar.Read <long>(); var dependencySectionEnd = Ar.Position + dependencySectionSize; var localNumDependsNodes = Ar.Read <int>(); PreallocatedDependsNodeDataBuffers = new FDependsNode[localNumDependsNodes]; for (int i = 0; i < localNumDependsNodes; i++) { PreallocatedDependsNodeDataBuffers[i] = new FDependsNode(i); } if (localNumDependsNodes > 0) { LoadDependencies(Ar); } Ar.Position = dependencySectionEnd; } PreallocatedPackageDataBuffers = Ar.ReadArray(() => new FAssetPackageData(Ar, version)); }
public void SerializeLoad(FAssetRegistryArchive Ar, Func <int, FDependsNode?> GetNodeFromSerializeIndex) { Identifier = new FAssetIdentifier(Ar); void ReadDependencies(ref List <FDependsNode> dependencies, ref BitArray outFlagBits, int flagSetWidth) { var numFlagBits = 0; BitArray inFlagBits = null; var sortIndexes = new List <int>(); var pointerDependencies = new List <FDependsNode>(); var inDependencies = Ar.ReadArray <int>(); var numDependencies = inDependencies.Length; if (outFlagBits != null) { numFlagBits = flagSetWidth * numDependencies; var numFlagWords = (numFlagBits + 32u - 1u) / 32u; inFlagBits = new BitArray(Ar.ReadBytes(Convert.ToInt32(numFlagWords))); } foreach (var serializeIndex in inDependencies) { var dependsNode = GetNodeFromSerializeIndex(serializeIndex); if (dependsNode == null) { throw new ParserException($"Index {serializeIndex} doesn't exist in 'PreallocatedDependsNodeDataBuffers'"); } pointerDependencies.Add(dependsNode); } for (var i = 0; i < numDependencies; i++) { sortIndexes.Add(i); } dependencies = new List <FDependsNode>(numDependencies); foreach (var index in sortIndexes) { dependencies.Add(pointerDependencies[index]); } if (outFlagBits != null) { outFlagBits = new BitArray(numFlagBits); for (var i = 0; i < numDependencies; i++) { var readIndex = sortIndexes[i]; var start = i * flagSetWidth; for (var j = 0; j < start + flagSetWidth; j++) // oof { outFlagBits.Set(j, inFlagBits.Get(readIndex * flagSetWidth + j)); } } } } BitArray myNameIsNull = null; ReadDependencies(ref PackageDependencies, ref PackageFlags, _packageFlagSetWidth); ReadDependencies(ref NameDependencies, ref myNameIsNull, 0); ReadDependencies(ref ManageDependencies, ref ManageFlags, _manageFlagSetWidth); ReadDependencies(ref Referencers, ref myNameIsNull, 0); }
public FAssetBundleData(FAssetRegistryArchive Ar) { Bundles = Ar.ReadArray(() => new FAssetBundleEntry(Ar)); }
public FAssetBundleEntry(FAssetRegistryArchive Ar) { BundleName = Ar.ReadFName(); BundleAssets = Ar.ReadArray(() => new FSoftObjectPath(Ar.ReadFName(), Ar.ReadFString())); }
public FMD5Hash(FAssetRegistryArchive Ar) { Hash = Ar.Read <uint>() != 0 ? Ar.ReadBytes(16) : null; }
public void SerializeLoad(FAssetRegistryArchive Ar, FDependsNode[] preallocatedDependsNodeDataBuffer) { Identifier = new FAssetIdentifier(Ar); void ReadDependencies(ref List <FDependsNode> outDependencies, ref BitArray?outFlagBits, int flagSetWidth) { var sortIndexes = new List <int>(); var pointerDependencies = new List <FDependsNode>(); var inDependencies = Ar.ReadArray <int>(); var numDependencies = inDependencies.Length; var numFlagBits = flagSetWidth * numDependencies; var numFlagWords = numFlagBits.DivideAndRoundUp(32); var inFlagBits = numFlagWords != 0 ? new BitArray(Ar.ReadArray <int>(numFlagWords)) : new BitArray(0); foreach (var serializeIndex in inDependencies) { if (serializeIndex < 0 || preallocatedDependsNodeDataBuffer.Length <= serializeIndex) { throw new ParserException($"Index {serializeIndex} doesn't exist in 'PreallocatedDependsNodeDataBuffers'"); } var dependsNode = preallocatedDependsNodeDataBuffer[serializeIndex]; pointerDependencies.Add(dependsNode); } for (var i = 0; i < numDependencies; i++) { sortIndexes.Add(i); } sortIndexes.Sort((a, b) => pointerDependencies[a]._index - pointerDependencies[b]._index); outDependencies = new List <FDependsNode>(numDependencies); foreach (var index in sortIndexes) { outDependencies.Add(pointerDependencies[index]); } outFlagBits = new BitArray(numFlagBits); for (var writeIndex = 0; writeIndex < numDependencies; writeIndex++) { var readIndex = sortIndexes[writeIndex]; outFlagBits.SetRangeFromRange(writeIndex * flagSetWidth, flagSetWidth, inFlagBits, readIndex * flagSetWidth); } } void ReadDependenciesNoFlags(ref List <FDependsNode> outDependencies) { var sortIndexes = new List <int>(); var pointerDependencies = new List <FDependsNode>(); var inDependencies = Ar.ReadArray <int>(); var numDependencies = inDependencies.Length; foreach (var serializeIndex in inDependencies) { if (serializeIndex < 0 || preallocatedDependsNodeDataBuffer.Length <= serializeIndex) { throw new ParserException($"Index {serializeIndex} doesn't exist in 'PreallocatedDependsNodeDataBuffers'"); } var dependsNode = preallocatedDependsNodeDataBuffer[serializeIndex]; pointerDependencies.Add(dependsNode); } for (var i = 0; i < numDependencies; i++) { sortIndexes.Add(i); } sortIndexes.Sort((a, b) => pointerDependencies[a]._index - pointerDependencies[b]._index); outDependencies = new List <FDependsNode>(numDependencies); foreach (var index in sortIndexes) { outDependencies.Add(pointerDependencies[index]); } } ReadDependencies(ref PackageDependencies, ref PackageFlags, PackageFlagSetWidth); ReadDependenciesNoFlags(ref NameDependencies); ReadDependencies(ref ManageDependencies, ref ManageFlags, ManageFlagSetWidth); ReadDependenciesNoFlags(ref Referencers); }