Skip to content

Instantly share code, notes, and snippets.

@bjartwolf
Created September 14, 2015 12:17
Show Gist options
  • Save bjartwolf/46b557a886583a5af1ad to your computer and use it in GitHub Desktop.
Save bjartwolf/46b557a886583a5af1ad to your computer and use it in GitHub Desktop.
type EnumerableFromEnumerator(input: IEnumerator<byte> ) =
interface IEnumerable<byte> with
member this.GetEnumerator() = input
interface System.Collections.IEnumerable with
member this.GetEnumerator() = input :> System.Collections.IEnumerator
let takeSkip (sequence: IEnumerable<byte>) (n: int) : (byte[] * IEnumerable<byte>) =
let enumerator = sequence.GetEnumerator()
let data = Array.zeroCreate(n)
let rec readSequence i =
let moreData = enumerator.MoveNext()
if (not moreData || i = n) then i
else
data.[i] <- enumerator.Current
readSequence (i+1)
let readBytes = readSequence 0
let sequence' = new EnumerableFromEnumerator(enumerator) :> IEnumerable<byte>
if (readBytes = n) then
(data, sequence')
else
(data.[0 .. readBytes], sequence')
@bjartwolf
Copy link
Author

Jonas just did it in three lines instead https://gist.github.com/bjartwolf/d1bf94521f48ae74809b

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment