Exemplo n.º 1
0
        public void SyncTo(BytePatterns bytePatterns, long seekUntil)
        {
            bytePatterns.Reset();

            var b = new byte[1024 * 1024];
            int foundRelativePosition = int.MinValue;
            while(foundRelativePosition == int.MinValue && !EOF) {
                if(seekUntil != -1 || Position < seekUntil) source.Read(b, 0, b.Length); else break;

                bytePatterns.Match(b, 0, (pattern, i) => { foundRelativePosition = i; return false; });
            }

            if(seekUntil != -1 && Position - b.Length + foundRelativePosition > seekUntil) foundRelativePosition = b.Length - (int)(Position - seekUntil);
            if(foundRelativePosition != int.MinValue) source.Position -= b.Length - foundRelativePosition;
        }
Exemplo n.º 2
0
        public void SyncTo(BytePatterns bytePatterns, long seekUntil)
        {
            bytePatterns.Reset();
            int foundRelativePosition = -1;
            while(foundRelativePosition < 0 && !EOF) {
                bytePatterns.Match(blocks.Current, (int)relativePosition, (pattern, i) => { foundRelativePosition = i; return false; });
                if(foundRelativePosition < 0) {
                    bytePatterns.Reset();
                    if(seekUntil == -1 || absolutePosition + BlockSize <= seekUntil) advance(); else break;
                }
            }

            if(seekUntil != -1 && absolutePosition + foundRelativePosition > seekUntil) foundRelativePosition = (int)(seekUntil - absolutePosition);
            if(foundRelativePosition >= 0) relativePosition = foundRelativePosition;
        }