Skip to main content

ElementCountNode

Struct ElementCountNode 

Source
#[non_exhaustive]
pub struct ElementCountNode { pub kind: ElementNodeKind, pub id: usize, pub name: String, pub span: Option<Span>, pub base_count: usize, pub adjustment: isize, pub count: usize, pub children: Vec<ElementCountNode>, }
Expand description

One node’s contribution and its nested element-count analysis.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§kind: ElementNodeKind§id: usize

An opaque identity unique within this report. It is not a WIR or storage arena index and has no meaning across reports.

§name: String

The canonical Workshop or analysis name for this node.

§span: Option<Span>

The authored source span, when the program retained one.

§base_count: usize

The node-local contribution before child counts and adjustments.

§adjustment: isize

The signed node-local adjustment, such as a direct-argument reduction or hero-pair surcharge.

§count: usize

The node’s recursive count: base_count + adjustment + children.

§children: Vec<ElementCountNode>

Nested values, conditions, and actions in canonical source order.

Implementations§

Source§

impl ElementCountNode

Source

pub fn height(&self) -> usize

The number of nodes on the longest downward path starting at this node: 1 for a leaf, otherwise 1 + max(child heights).

This is a structural measure of the report tree, not a client limit; it answers “how deeply nested is this subtree” without claiming anything about importability.

Source

pub fn node_count(&self) -> usize

The number of nodes in this subtree, including this node.

Unlike count, which is the weighted client element cost, this is the plain cardinality of the report subtree.

Source

pub fn statement_value_nodes(&self) -> usize

The number of value nodes in this node’s own statement value trees: Value nodes reachable from this node without entering a descendant Action subtree.

On an Action this counts its own argument trees; actions nested in block bodies are separate statements and are excluded. On a Condition it is the condition’s value tree, and on a Rule it is the conditions’ value trees only — each action carries its own statement. On a Value node this equals node_count().

A comparison keeps its operator as a Value node inside an If or While argument, while a rule condition absorbs it into the Condition node — so one source expression measures one node fewer as a rule condition than as a block condition.

Trait Implementations§

Source§

impl Clone for ElementCountNode

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ElementCountNode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.