basic benchmark

This commit is contained in:
Robin Appelman 2020-05-02 14:15:25 +02:00
commit d3765674d4
3 changed files with 29 additions and 6 deletions

View file

@ -6,6 +6,7 @@ pub use crate::navmesh::{
use crate::parser::read_areas;
pub use crate::parser::{NavArea, ParseError};
use aabb_quadtree::{ItemId, QuadTree};
use bitbuffer::{BitReadStream, LittleEndian};
use euclid::{TypedPoint2D, TypedRect, TypedSize2D};
mod navmesh;
@ -29,8 +30,8 @@ pub struct NavTree(QuadTree<NavArea, HammerUnit, [(ItemId, Rect); 4]>);
/// # Ok(())
/// # }
/// ```
pub fn get_area_tree(data: Vec<u8>) -> Result<NavTree, ParseError> {
let areas = read_areas(data)?;
pub fn get_area_tree(data: impl Into<BitReadStream<LittleEndian>>) -> Result<NavTree, ParseError> {
let areas = read_areas(data.into())?;
let (min_x, min_y, max_x, max_y) = areas.iter().fold(
(f32::MAX, f32::MAX, f32::MIN, f32::MIN),

View file

@ -1,5 +1,5 @@
pub use crate::navmesh::NavArea;
use bitbuffer::{BitReadBuffer, BitReadStream, LittleEndian};
use bitbuffer::{BitReadStream, LittleEndian};
use err_derive::Error;
/// Errors that can occur when parsing the binary nav file
@ -19,8 +19,9 @@ pub enum ParseError {
UnsupportedVersion(u32),
}
pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
let mut data = BitReadStream::new(BitReadBuffer::new(data, LittleEndian));
pub(crate) fn read_areas(
mut data: BitReadStream<LittleEndian>,
) -> Result<Vec<NavArea>, ParseError> {
let magic = data.read()?;
if magic != 0xFEED_FACE {
return Err(ParseError::InvalidMagicNumber(magic));
@ -146,6 +147,7 @@ pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
#[test]
fn test() {
let file = std::fs::read("data/pl_badwater.nav").unwrap();
let areas = read_areas(file).unwrap();
let data = BitReadStream::new(bitbuffer::BitReadBuffer::new(file, LittleEndian));
let areas = read_areas(data).unwrap();
assert_eq!(1930, areas.len());
}