示例#1
0
        public int PushData(ByteData data, long offset)
        {
            if (this.Size == 0L)
            {
                throw new InvalidOperationException();
            }
            long size    = this.Size;
            long offset1 = offset;
            ArraySegment <byte> buffer = data.Buffer;
            int count1       = buffer.Count;
            int writableSize = SinkUtil.GetWritableSize(size, offset1, count1);

            if (writableSize == 0)
            {
                return(0);
            }
            this.m_stream.Seek(offset, SeekOrigin.Begin);
            Stream stream = this.m_stream;

            buffer = data.Buffer;
            byte[] array = buffer.Array;
            buffer = data.Buffer;
            int offset2 = buffer.Offset;
            int count2  = writableSize;

            stream.Write(array, offset2, count2);
            this.m_status.FilledRangeList.MergingAdd(new Range(offset, (long)writableSize));
            this.m_status.IsFilled = SinkUtil.CheckIsFilled(this.m_status.FilledRangeList, this.Size);
            return(writableSize);
        }
        public SinkStatus QueryStatus()
        {
            SinkStatus sinkStatus = new SinkStatus();

            foreach (Range availableRange in (List <Range>) this.m_source.QueryStatus().AvailableRangeList)
            {
                sinkStatus.FilledRangeList.MergingAdd(availableRange);
            }
            sinkStatus.IsFilled = SinkUtil.CheckIsFilled(sinkStatus.FilledRangeList, this.Size);
            return(sinkStatus);
        }
示例#3
0
        public int PushData(ByteData data, long offset)
        {
            int writableSize = SinkUtil.GetWritableSize(this.Size, offset, data.Buffer.Count);

            if (writableSize == 0)
            {
                return(0);
            }
            Buffer.BlockCopy((Array)data.Buffer.Array, data.Buffer.Offset, (Array)this.m_buffer, (int)offset, writableSize);
            this.m_status.FilledRangeList.MergingAdd(new Range(offset, (long)writableSize));
            this.m_status.IsFilled = SinkUtil.CheckIsFilled(this.m_status.FilledRangeList, this.Size);
            return(writableSize);
        }
示例#4
0
        public int PushData(ByteData data, long offset)
        {
            int writableSize = SinkUtil.GetWritableSize(this.Size, offset, data.Buffer.Count);

            if (writableSize == 0)
            {
                return(0);
            }
            this.m_storage.Write(offset, data.Buffer.Array);
            this.m_storage.Commit();
            this.m_status.FilledRangeList.MergingAdd(new Range(offset, (long)writableSize));
            this.m_status.IsFilled = SinkUtil.CheckIsFilled(this.m_status.FilledRangeList, this.Size);
            return(writableSize);
        }
示例#5
0
        public int PushData(ByteData data, long offset)
        {
            int count = data.Buffer.Count;

            if (offset + (long)count > this.Size)
            {
                int num = (int)(this.Size - offset);
                count = num > 0 ? num : 0;
            }
            int num1 = this.m_sink.PushData(new ByteData(new ArraySegment <byte>(data.Buffer.Array, data.Buffer.Offset, count)), this.m_offset + offset);

            this.m_status.FilledRangeList.MergingAdd(new Range(offset, (long)num1));
            this.m_status.IsFilled = SinkUtil.CheckIsFilled(this.m_status.FilledRangeList, this.Size);
            return(num1);
        }
示例#6
0
        public int PushData(ByteData data, long offset)
        {
            int writableSize = SinkUtil.GetWritableSize(this.Size, offset, data.Buffer.Count);

            if (writableSize == 0)
            {
                return(0);
            }
            using (Stream stream1 = (Stream) new SubStream((Stream) new FileStream(this.m_filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.RandomAccess), this.m_offset, this.Size))
            {
                stream1.Seek(offset, SeekOrigin.Begin);
                Stream stream2             = stream1;
                ArraySegment <byte> buffer = data.Buffer;
                byte[] array = buffer.Array;
                buffer = data.Buffer;
                int offset1 = buffer.Offset;
                int count   = writableSize;
                stream2.Write(array, offset1, count);
            }
            this.m_status.FilledRangeList.MergingAdd(new Range(offset, (long)writableSize));
            this.m_status.IsFilled = SinkUtil.CheckIsFilled(this.m_status.FilledRangeList, this.Size);
            return(writableSize);
        }