Home / File/ fast_skip.rs — tailwindcss Source File

fast_skip.rs — tailwindcss Source File

Architecture documentation for fast_skip.rs, a rust file in the tailwindcss codebase. 1 imports, 0 dependents.

File rust OxideEngine Scanner 1 imports 6 functions

Entity Profile

Dependency Diagram

graph LR
  da8a4fe3_f449_f96e_2529_4eb000066b15["fast_skip.rs"]
  b6a1608b_cfa1_c3dc_edaf_cd7a8735add0["crate::cursor::Cursor"]
  da8a4fe3_f449_f96e_2529_4eb000066b15 --> b6a1608b_cfa1_c3dc_edaf_cd7a8735add0
  style da8a4fe3_f449_f96e_2529_4eb000066b15 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

use crate::cursor::Cursor;

const STRIDE: usize = 16;
type Mask = [bool; STRIDE];

#[inline(always)]
pub fn fast_skip(cursor: &Cursor) -> Option<usize> {
    // If we don't have enough bytes left to check then bail early
    if cursor.pos + STRIDE >= cursor.input.len() {
        return None;
    }

    if !cursor.curr.is_ascii_whitespace() {
        return None;
    }

    let mut offset = 1;

    // SAFETY: We've already checked (indirectly) that this index is valid
    let remaining = unsafe { cursor.input.get_unchecked(cursor.pos..) };

    // NOTE: This loop uses primitives designed to be auto-vectorized
    // Do not change this loop without benchmarking the results
    // And checking the generated assembly using godbolt.org
    for (i, chunk) in remaining.chunks_exact(STRIDE).enumerate() {
        let value = load(chunk);
        let is_whitespace = is_ascii_whitespace(value);
        let is_all_whitespace = all_true(is_whitespace);

        if is_all_whitespace {
            offset = (i + 1) * STRIDE;
        } else {
            break;
        }
    }

    Some(cursor.pos + offset)
}

#[inline(always)]
fn load(input: &[u8]) -> [u8; STRIDE] {
    let mut value = [0u8; STRIDE];
    value.copy_from_slice(input);
    value
}

#[inline(always)]
fn eq(input: [u8; STRIDE], val: u8) -> Mask {
    let mut res = [false; STRIDE];
    for n in 0..STRIDE {
        res[n] = input[n] == val
    }
    res
}

#[inline(always)]
fn or(a: [bool; STRIDE], b: [bool; STRIDE]) -> [bool; STRIDE] {
    let mut res = [false; STRIDE];
    for n in 0..STRIDE {
        res[n] = a[n] | b[n];
    }
    res
}

#[inline(always)]
fn all_true(a: [bool; STRIDE]) -> bool {
    let mut res = true;
    for item in a.iter().take(STRIDE) {
        res &= item;
    }
    res
}

#[inline(always)]
fn is_ascii_whitespace(value: [u8; STRIDE]) -> [bool; STRIDE] {
    let whitespace_1 = eq(value, b'\t');
    let whitespace_2 = eq(value, b'\n');
    let whitespace_3 = eq(value, b'\x0C');
    let whitespace_4 = eq(value, b'\r');
    let whitespace_5 = eq(value, b' ');

    or(
        or(
            or(or(whitespace_1, whitespace_2), whitespace_3),
            whitespace_4,
        ),
        whitespace_5,
    )
}

Domain

Subdomains

Dependencies

  • crate::cursor::Cursor

Frequently Asked Questions

What does fast_skip.rs do?
fast_skip.rs is a source file in the tailwindcss codebase, written in rust. It belongs to the OxideEngine domain, Scanner subdomain.
What functions are defined in fast_skip.rs?
fast_skip.rs defines 6 function(s): all_true, eq, fast_skip, is_ascii_whitespace, load, or.
What does fast_skip.rs depend on?
fast_skip.rs imports 1 module(s): crate::cursor::Cursor.
Where is fast_skip.rs in the architecture?
fast_skip.rs is located at crates/oxide/src/fast_skip.rs (domain: OxideEngine, subdomain: Scanner, directory: crates/oxide/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free