public static ZwinderStateManager Create(BinaryReader br, ZwinderStateManagerSettings settings, Func <int, bool> reserveCallback) { // Initial format had no version number, but I think it's a safe bet no valid file has buffer size 2^56 or more so this should work. int version = br.ReadByte(); var current = ZwinderBuffer.Create(br, settings.Current(), version == 0); var recent = ZwinderBuffer.Create(br, settings.Recent()); var gaps = ZwinderBuffer.Create(br, settings.GapFiller()); if (version == 0) { settings.AncientStateInterval = br.ReadInt32(); } var ret = new ZwinderStateManager(current, recent, gaps, reserveCallback, settings); var ancientCount = br.ReadInt32(); for (var i = 0; i < ancientCount; i++) { var key = br.ReadInt32(); var length = br.ReadInt32(); var data = br.ReadBytes(length); ret._reserved.Add(key, data); } ret.RebuildStateCache(); return(ret); }
public static ZwinderStateManager Create(BinaryReader br, ZwinderStateManagerSettings settings, Func <int, bool> reserveCallback) { var current = ZwinderBuffer.Create(br); var recent = ZwinderBuffer.Create(br); var gaps = ZwinderBuffer.Create(br); var ancientInterval = br.ReadInt32(); var ret = new ZwinderStateManager(current, recent, gaps, ancientInterval, reserveCallback) { Settings = settings }; var ancientCount = br.ReadInt32(); for (var i = 0; i < ancientCount; i++) { var key = br.ReadInt32(); var length = br.ReadInt32(); var data = br.ReadBytes(length); ret._reserved.Add(key, data); } ret.RebuildStateCache(); return(ret); }