public TagIndex(CacheStream cache, IReadOnlyList <string> paths) : base(cache) { var binaryReader = new BinaryReader(cache); _classes = new List <TagClassHeirarchy>(new TagClassHeirarchy[classArrayCount]); for (var i = 0; i < classArrayCount; i++) { _classes[i] = new TagClassHeirarchy(binaryReader.ReadTagClass(), binaryReader.ReadTagClass(), binaryReader.ReadTagClass()); } _data = new List <TagDatum>(new TagDatum[datumArrayCount]); var cacheKey = CacheKey.Create(cache); for (var i = 0; i < datumArrayCount && i < paths.Count; i++) { TagDatum data; do { data = new TagDatum { Class = binaryReader.ReadTagClass( ), Identifier = binaryReader.ReadTagIdent( ), VirtualAddress = binaryReader.ReadInt32( ), Length = binaryReader.ReadInt32( ), CacheKey = cacheKey }; } while (TagDatum.IsNull(data)); data.Path = paths[i]; _data[i] = data; } }
public static CacheStream Save(CacheStream map) { var filename = Path.Combine(Local.MapsDirectory, @"temp.map"); var copyStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, 4 * 1024, FileOptions.SequentialScan); using (copyStream) using ( map ) { map.SaveTo(copyStream); } File.Delete(map.Name); File.Move(filename, map.Name); return(new CacheStream(map.Name)); }
protected TagIndexBase(CacheStream cache) { var binaryReader = new BinaryReader(cache); classArrayAddress = binaryReader.ReadInt32(); classArrayCount = binaryReader.ReadInt32(); datumArrayAddress = binaryReader.ReadInt32(); ScenarioIdent = binaryReader.ReadTagIdent(); GlobalsIdent = binaryReader.ReadTagIdent(); _noodleValue = binaryReader.ReadInt32(); datumArrayCount = binaryReader.ReadInt32(); fourCC = binaryReader.ReadTagClass(); if (fourCC != new TagClass("tags")) { throw new InvalidDataException(); } }
internal static CacheStream SaveAs(CacheStream map, string destFileName) { var filename = Path.Combine(Local.MapsDirectory, @"temp.map"); var copyStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, 4 * 1024, FileOptions.SequentialScan); using (copyStream) using ( map ) { map.SaveTo(copyStream); map.Sign( ); } if (File.Exists(destFileName)) { File.Delete(destFileName); } File.Move(filename, destFileName); return(new CacheStream(destFileName)); }
public CacheWriter(CacheStream stream) { cacheStream = stream; }