///|
fn pdf_content_run_length_encoded_length(data : BytesView) -> Int? {
  let mut index = 0
  while index < data.length() {
    let control = data[index].to_int()
    index += 1
    if control < 128 {
      index += control + 1
    } else if control > 128 {
      index += 1
    } else {
      return Some(index)
    }
  }
  None
}

///|
fn pdf_content_read_run_length_inline_image_data(
  cursor : @core.ByteCursor,
) -> @core.PdfBytes raise @core.PdfError {
  match cursor.peek_byte() {
    value if @core.pdf_is_whitespace_byte(value) => cursor.nudge()
    _ => ()
  }
  match pdf_content_run_length_encoded_length(cursor.remaining_view()) {
    Some(length) => {
      let data = cursor.read_view(length).to_owned()
      pdf_content_read_inline_image_end(cursor)
      data
    }
    None => raise ParseEndStreamExpected
  }
}

///|
fn pdf_content_run_length_decode_view_prefix(
  data : BytesView,
) -> (@core.PdfBytes, Int) raise @core.PdfError {
  let (output_length, consumed) = pdf_content_run_length_decoded_prefix_length(
    data,
  )
  let output = Array::make(output_length, b'\x00')
  let mut output_index = 0
  let mut index = 0
  while output_index < output_length {
    let control = data[index].to_int()
    index += 1
    if control < 128 {
      let wanted = control + 1
      for i in 0.. (Int, Int) raise @core.PdfError {
  let mut output_length = 0
  let mut index = 0
  while index < data.length() {
    let control = data[index].to_int()
    index += 1
    if control < 128 {
      let wanted = control + 1
      if index + wanted > data.length() {
        raise ParseEndStreamExpected
      }
      output_length += wanted
      index += wanted
    } else if control > 128 {
      if index >= data.length() {
        raise ParseEndStreamExpected
      }
      index += 1
      output_length += 257 - control
    } else {
      return (output_length, index)
    }
  }
  raise ParseEndStreamExpected
}

///|
fn pdf_content_read_run_length_inline_image_decoded(
  cursor : @core.ByteCursor,
) -> @core.PdfBytes raise @core.PdfError {
  match cursor.peek_byte() {
    value if @core.pdf_is_whitespace_byte(value) => cursor.nudge()
    _ => ()
  }
  let (decoded, length) = pdf_content_run_length_decode_view_prefix(
    cursor.remaining_view(),
  )
  ignore(cursor.read_view(length))
  pdf_content_read_inline_image_end(cursor)
  decoded
}