/// <summary> /// Reads a region from a stream. /// </summary> public static DataRegion Read(InStream Stream) { return new DataRegion { Start = Stream.ReadLong(), Size = Stream.ReadLong() }; }
/// <summary> /// Insures that the local stream has a size of at least 1. /// </summary> private void _Feed() { while (this._LocalStreamSize == 0) { ((Disposable<InStream>)this._LocalStream).Dispose(); Data next = this._Parts[++this._LocalPart]; this._LocalStream = next.Read(); this._LocalStreamSize = next.Size; } }
public override void Advance(long Amount) { if (Amount <= this._LocalStreamSize) { this._LocalStream.Advance(Amount); this._LocalStreamSize -= Amount; } else { ((Disposable<InStream>)this._LocalStream).Dispose(); Data next; long size; while ((size = (next = this._Parts[++this._LocalPart]).Size) < Amount) { Amount -= size; } this._LocalStream = next.Read(Amount); this._LocalStreamSize = size - Amount; } }
public Stream(Data[] Parts, int LocalPart, long LocalStreamSize, InStream LocalStream) { this._Parts = Parts; this._LocalPart = LocalPart; this._LocalStreamSize = LocalStreamSize; this._LocalStream = LocalStream; }
/// <summary> /// Copies data from a source stream into this stream. /// </summary> public virtual void Write(InStream Source, long Amount) { while (Amount > 0) { this.Write(Source.Read()); Amount--; } }
public override void Write(InStream Source, long Amount) { this._Count += Amount; Source.Advance(Amount); }