Consistent overhead byte stuffing: Difference between revisions

Content added Content deleted
(→‎C: state authorship)
Line 103: Line 103:
let encode g=seq{yield! fN(seq{yield! g; yield 0uy}); yield 0uy}
let encode g=seq{yield! fN(seq{yield! g; yield 0uy}); yield 0uy}
let rec fT g=seq{match Seq.head g with 0uy->() |n->yield 0uy; yield! g|>Seq.take(int n)|>Seq.skip 1; yield! fT(g|>Seq.skip(int n))}
let rec fT g=seq{match Seq.head g with 0uy->() |n->yield 0uy; yield! g|>Seq.take(int n)|>Seq.skip 1; yield! fT(g|>Seq.skip(int n))}
let fI n=if n then seq[0uy] else Seq.empty
let decode g=seq{let n=int(Seq.head g) in yield! g|>Seq.take n|>Seq.skip 1; yield! fT(g|>Seq.skip n)}
let rec fG n g=seq{match Seq.head g with 0uy->() |255uy->yield! fI n; yield! (g|>Seq.take 255|>Seq.skip 1); yield! fG false (g|>Seq.skip 255)
|i->yield! fI n; yield! g|>Seq.take(int i)|>Seq.skip 1; yield! fG true (g|>Seq.skip(int i))}
let decode g=seq{yield! fG false g}
</syntaxhighlight>
</syntaxhighlight>

===Tests===
===Tests===
<syntaxhighlight lang="fsharp">
<syntaxhighlight lang="fsharp">