PeekableIncomingSegmentStream.cs 887 B

1234567891011121314151617181920212223242526272829303132
  1. namespace BestHTTP.Extensions
  2. {
  3. public sealed class PeekableIncomingSegmentStream : BufferSegmentStream
  4. {
  5. private int peek_listIdx;
  6. private int peek_pos;
  7. public void BeginPeek()
  8. {
  9. peek_listIdx = 0;
  10. peek_pos = base.bufferList.Count > 0 ? base.bufferList[0].Offset : 0;
  11. }
  12. public int PeekByte()
  13. {
  14. if (base.bufferList.Count == 0)
  15. return -1;
  16. var segment = base.bufferList[this.peek_listIdx];
  17. if (peek_pos >= segment.Offset + segment.Count)
  18. {
  19. if (base.bufferList.Count <= this.peek_listIdx + 1)
  20. return -1;
  21. segment = base.bufferList[++this.peek_listIdx];
  22. this.peek_pos = segment.Offset;
  23. }
  24. return segment.Data[this.peek_pos++];
  25. }
  26. }
  27. }