/// <summary> /// Deserialize the dependency cache from a binary reader /// </summary> /// <param name="Reader">Reader for the cache data</param> /// <returns>New dependency cache object</returns> static FlatCPPIncludeDependencyCache Deserialize(BinaryReader Reader) { FlatCPPIncludeDependencyCache Cache = new FlatCPPIncludeDependencyCache(Reader.ReadFileReference()); // Create the dependency map int NumDependencyMapEntries = Reader.ReadInt32(); Cache.DependencyMap = new Dictionary<FileReference, FlatCPPIncludeDependencyInfo>(NumDependencyMapEntries); // Read all the dependency map entries List<FileReference> UniqueFiles = new List<FileReference>(NumDependencyMapEntries * 2); for (int Idx = 0; Idx < NumDependencyMapEntries; Idx++) { FileReference File = Reader.ReadFileReference(); FlatCPPIncludeDependencyInfo Info = new FlatCPPIncludeDependencyInfo(); // Read the PCH name Info.PCHName = Reader.ReadFileReference(UniqueFiles); // Read the includes int NumIncludes = Reader.ReadInt32(); Info.Includes = new List<FileReference>(NumIncludes); for (int IncludeIdx = 0; IncludeIdx < NumIncludes; IncludeIdx++) { Info.Includes.Add(Reader.ReadFileReference(UniqueFiles)); } // Add it to the map Cache.DependencyMap.Add(File, Info); } return Cache; }
/// <summary> /// Deserialize the dependency cache from a binary reader /// </summary> /// <param name="Reader">Reader for the cache data</param> /// <returns>New dependency cache object</returns> static DependencyCache Deserialize(BinaryReader Reader) { DependencyCache Cache = new DependencyCache(Reader.ReadFileReference()); Cache.CreationTimeUtc = DateTime.FromBinary(Reader.ReadInt64()); int NumEntries = Reader.ReadInt32(); Cache.DependencyMap = new Dictionary<FileReference, List<DependencyInclude>>(NumEntries); List<FileReference> UniqueFiles = new List<FileReference>(); for (int Idx = 0; Idx < NumEntries; Idx++) { FileReference File = Reader.ReadFileReference(); int NumIncludes = Reader.ReadInt32(); List<DependencyInclude> Includes = new List<DependencyInclude>(NumIncludes); for (int IncludeIdx = 0; IncludeIdx < NumIncludes; IncludeIdx++) { DependencyInclude Include = new DependencyInclude(Reader.ReadString()); Include.HasAttemptedResolve = Reader.ReadBoolean(); Include.IncludeResolvedNameIfSuccessful = Reader.ReadFileReference(UniqueFiles); Includes.Add(Include); } Cache.DependencyMap.Add(File, Includes); } Cache.CreateFileExistsInfo(); Cache.ResetUnresolvedDependencies(); return Cache; }