def jpeg.file.marker
gralha-jpeg-decode@0.1.0.1 · jpeg.bend:597
import gralha-jpeg-decode@0.1.0.1/jpeg.bend as Jpeg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-bytes@0.1.0.1/bytes.bend as Bin
597def jpeg.file.marker(marker: JPEGMarker, +src: Bin.Bytes, +frame: JPEGFrame, +seen: Bool, next: U32 -> JPEGFrame -> Bool -> JPEGFrame) -> JPEGFrame:
598 JPEGMarker{tag, at, valid} = marker
599 +kind = tag
600 +pos = at
601 +ok = valid
602 +size = Bin.bytes.be(src, pos, 2n, 0)
603 +end = (pos + size : U32)
604 +done = U32.is_eq(kind, 217)
605 +invalid = Bool.not(ok) || Bool.not(jpeg.frame.valid(frame)) || U32.is_lt(kind, 192) || (U32.is_ge(kind, 208) && U32.is_le(kind, 216)) || (Bool.not(done) && (U32.is_lt(size, 2) || U32.is_gt(end, Bin.bytes.size(src))))
606 +stop = done || invalid
607 +result = U.branch(JPEGDecoded, stop, _ => JPEGDecoded{U.choose(JPEGFrame, done && seen && Bool.not(invalid), frame, jpeg.frame.invalid(frame)), pos}, _ => jpeg.file.segment(src, (pos + 2 : U32), end, kind, frame))
608 jpeg.file.continue(result, stop, seen || U32.is_eq(kind, 218), next)
609
610@unsafe