lopdf_bugfix_19072017 0.9.0

A Rust library for PDF document manipulation.
Documentation
use pom::{Input, DataInput};
use std::io::Read;
use std::str::FromStr;
use super::{Object, ObjectId, Stream};
use super::parser;

#[derive(Debug)]
pub struct ObjectStream {
	pub objects: Vec<(ObjectId, Object)>,
}

impl ObjectStream {
	pub fn new(stream: &mut Stream) -> ObjectStream {
		stream.decompress();
		let first_offset = stream.dict.get("First").and_then(|obj|obj.as_i64()).unwrap() as usize;
		let count = stream.dict.get("N").and_then(|obj|obj.as_i64()).unwrap() as usize;

		let mut index_block = vec![0_u8; first_offset];
		stream.content.as_slice().read_exact(index_block.as_mut_slice()).unwrap();

		let numbers = String::from_utf8(index_block).unwrap();
		let numbers = numbers.split_whitespace().map(|number|u32::from_str(number).unwrap());
		let mut numbers = numbers.into_iter();

		let mut objects = Vec::with_capacity(count);
		while let Some(id) = numbers.next() {
			let offset = first_offset + numbers.next().unwrap() as usize;
			let mut data = DataInput::new(stream.content.as_slice());
			data.jump_to(offset);
			if let Ok(object) = parser::direct_object().parse(&mut data) {
				objects.push(((id, 0), object));
			}
		}
		ObjectStream { objects }
	}

	pub fn get_object(&self, index: usize) -> Option<&(ObjectId, Object)> {
		if index < self.objects.len() {
			Some(&self.objects[index])
		} else {
			None
		}
	}
}