Dicom.P10.Stream.Parser (Dicom v0.9.1)

Copy Markdown View Source

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

frame()

@type frame() ::
  {:sequence, non_neg_integer() | :undefined, non_neg_integer()}
  | {:item, non_neg_integer() | :undefined, non_neg_integer()}
  | {:pixel_data, non_neg_integer()}

state()

@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

new(source)

@spec new(Dicom.P10.Stream.Source.t()) :: state()

Creates a new parser state from a source.

next(state)

@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.