Skip to main content

EntityScanner

Struct EntityScanner 

Source
pub struct EntityScanner<'a> { /* private fields */ }
Expand description

Fast entity scanner over raw IFC bytes without full parsing. O(n) performance for finding entities by type Uses memchr for SIMD-accelerated byte searching

Implementations§

Source§

impl<'a> EntityScanner<'a>

Source

pub fn new<T>(content: &'a T) -> Self
where T: AsRef<[u8]> + ?Sized,

Create a new scanner.

Positions past the STEP HEADER section when one is present so that a stray # inside a header string (e.g. a CATIA FILE_NAME like '…\X0\2#.ifc') can’t be mistaken for an entity start and corrupt quote-parity for the rest of the file (issue #654).

Source

pub fn new_at<T>(content: &'a T, position: usize) -> Self
where T: AsRef<[u8]> + ?Sized,

Create a scanner positioned at a specific byte offset.

Used by the sharded-scan pre-pass: each shard scans the full file (so byte offsets returned are GLOBAL, not relative to the shard’s range) but starts walking at its assigned start offset. Callers are expected to rewind position to a known entity boundary (typically the byte after a ;\n terminator) before calling next_entity.

Does NOT auto-skip the HEADER section — that’s the caller’s responsibility, since shards expect the exact offset they were given.

Source

pub fn position(&self) -> usize

Current byte offset of the scanner (start of the next entity to scan).

Source

pub fn next_entity(&mut self) -> Option<(u32, &'a str, usize, usize)>

Scan for the next entity Returns (entity_id, type_name, line_start, line_end)

Source

pub fn find_by_type(&mut self, target_type: &str) -> Vec<(u32, usize, usize)>

Find all entities of a specific type

Source

pub fn count_by_type(&mut self) -> FxHashMap<String, usize>

Count entities by type

Source

pub fn count(&mut self) -> usize

Count the entities remaining from the scanner’s current position, without allocating anything per entity.

Unlike count_by_type (which builds a per-keyword map) or build_entity_index (which retains a span per entity, ~20 B each), this walks the byte stream and increments a single counter: O(scan) time, O(1) memory. It is the cheap primitive for a downstream entity-count DoS guard on a file too large to index (issue #1517). Advances the scanner to the end of the data section.

Source

pub fn reset(&mut self)

Reset scanner to beginning (re-applies the HEADER skip).

Source

pub fn has_non_null_attribute( &self, start: usize, end: usize, attr_index: usize, ) -> bool

Fast check if attribute at given index is non-null (not ‘$’) This is used to filter building elements that don’t have representation without full entity decode. Index 0 is first attribute after ‘(’.

Returns true if attribute exists and is not ‘$’, false otherwise.

Auto Trait Implementations§

§

impl<'a> Freeze for EntityScanner<'a>

§

impl<'a> RefUnwindSafe for EntityScanner<'a>

§

impl<'a> Send for EntityScanner<'a>

§

impl<'a> Sync for EntityScanner<'a>

§

impl<'a> Unpin for EntityScanner<'a>

§

impl<'a> UnsafeUnpin for EntityScanner<'a>

§

impl<'a> UnwindSafe for EntityScanner<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.