///|
fn pdf_read_reconstructed_xrefs(
  data : BytesView,
) -> Array[PdfClassicXRefEntry] raise PdfError {
  let xrefs : Array[PdfClassicXRefEntry] = Array::new(capacity=16)
  let cursor = byte_cursor_of_view(data)
  let xref_index = pdf_classic_xref_index(xrefs)
  let mut position = 0
  while position < data.length() {
    if pdf_reader_reconstruction_indirect_header_at(data, position) {
      cursor.seek_absolute(position)
      let parsed : Result[(PdfParsedIndirectObject, Int?), Error] = try? pdf_cursor_read_reconstructed_indirect_scan_candidate_at_current(
        cursor,
        xrefs,
        xref_index=Some(xref_index),
      )
      match parsed {
        Ok((object, next_position)) => {
          if object.number > 0 {
            let xref = {
              object_number: object.number,
              offset: position,
              generation: object.generation,
              in_use: true,
              object_stream: None,
            }
            xrefs.push(xref)
            if !xref_index.entries.contains(xref.object_number) {
              xref_index.entries[xref.object_number] = xref
            }
          }
          match next_position {
            Some(next) if next > position => position = next
            _ => position += 1
          }
        }
        Err(_) =>
          position = pdf_reader_reconstruction_skip_malformed_object(
            data, position,
          ).unwrap()
      }
    } else {
      position += 1
    }
  }
  xrefs
}