Пример #1
0
        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);
        }
        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);
        }
Пример #3
0
        public static ZwinderStateManager Create(BinaryReader br, ZwinderStateManagerSettings settings)
        {
            var current      = ZwinderBuffer.Create(br);
            var recent       = ZwinderBuffer.Create(br);
            var highPriority = ZwinderBuffer.Create(br);

            var original = br.ReadBytes(br.ReadInt32());

            var ancientInterval = br.ReadInt32();

            var ret = new ZwinderStateManager(current, recent, highPriority, original, ancientInterval)
            {
                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._ancient.Add(new KeyValuePair <int, byte[]>(key, data));
            }

            return(ret);
        }