Created
September 14, 2015 12:17
-
-
Save bjartwolf/46b557a886583a5af1ad to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Jonas just did it in three lines instead https://gist.github.com/bjartwolf/d1bf94521f48ae74809b