Streaming DICOM P10 state machine parser.
Emits Dicom.P10.Stream.Event values as it traverses a DICOM P10 binary.
Tracks state through phases: preamble -> file_meta -> data_set -> done.
Handles sequences, items, and encapsulated pixel data via a nesting stack
with bytes_consumed_in_frame tracking for defined-length containers.
This module is not meant to be used directly. Use Dicom.P10.Stream instead.
Summary
Functions
Creates a new parser state from a source.
Advances the parser by one step, returning the next event and updated state.
Types
@type frame() :: {:sequence, non_neg_integer() | :undefined, non_neg_integer()} | {:item, non_neg_integer() | :undefined, non_neg_integer()} | {:pixel_data, non_neg_integer()}
@type state() :: %{ phase: :preamble | :file_meta | :data_set | :done, source: Dicom.P10.Stream.Source.t(), vr_encoding: :implicit | :explicit, endianness: :little | :big, transfer_syntax_uid: String.t() | nil, file_meta: %{required(Dicom.DataElement.tag()) => Dicom.DataElement.t()}, stack: [frame()], pixel_fragment_index: non_neg_integer() }
Functions
@spec new(Dicom.P10.Stream.Source.t()) :: state()
Creates a new parser state from a source.
@spec next(state()) :: {Dicom.P10.Stream.Event.t(), state()} | nil
Advances the parser by one step, returning the next event and updated state.
Returns {event, state} or nil when parsing is complete.