pencil-box 0.1.11

A performance-focused, memory-efficient utility library for Rust โ€” built for engineers who care about speed, safety, and maintainability.
Documentation
/// ๐Ÿงฑ Creates a new vector of the specified size, filled with default values for the type.
///
/// # Type Parameters
/// - `T`: The type of elements in the vector. Must implement [`Default`] and [`Clone`].
///
/// # Arguments
/// - `size`: The number of elements to generate.
///
/// # Returns
/// A `Vec<T>` of length `size`, where each element is a clone of `T::default()`.
///
/// # Behavior
/// - Produces an empty vector if `size == 0`.
/// - Allocates space for `size` elements on the heap.
/// - Each element is a clone of the typeโ€™s default value, as returned by [`T::default()`].
///
/// # Performance
/// - โœ… Time complexity: **O(n)** where `n = size`.
/// - โœ… Space complexity: **O(n)** heap-allocated.
/// - โœ… Minimal overhead, efficient default initialization.
/// - ๐Ÿšซ No in-place mutation; constructs a new vector.
///
/// # Examples
///
/// ## ๐Ÿ”ข Primitive Types
/// ```
/// use pencil_box::array::fill_default::fill_default;
///
/// let vec: Vec<i32> = fill_default(3);
/// assert_eq!(vec, vec![0, 0, 0]);
///
/// let vec: Vec<bool> = fill_default(2);
/// assert_eq!(vec, vec![false, false]);
/// ```
///
/// ## ๐Ÿงต Complex Types
/// ```
/// let vec: Vec<String> = fill_default(2);
/// assert_eq!(vec, vec![String::new(), String::new()]);
///
/// let vec: Vec<Vec<u8>> = fill_default(2);
/// assert_eq!(vec, vec![vec![], vec![]]);
/// ```
///
/// ## ๐ŸŽญ Enum with Default Variant
/// ```
/// #[derive(Debug, PartialEq, Clone, Default)]
/// enum Status {
///     #[default]
///     Idle,
///     Busy,
/// }
///
/// let vec = fill_default::<Status>(3);
/// assert_eq!(vec, vec![Status::Idle, Status::Idle, Status::Idle]);
/// ```
///
/// # Panic Safety
/// โœ… This function is panic-free for all valid `size` inputs.
///
/// # Features
/// - ๐Ÿ“ฆ No dependencies, pure safe Rust.
/// - ๐Ÿงฑ Ideal for zero-initialized buffers or defaulted collections.
/// - ๐Ÿ› ๏ธ Composable with iterator pipelines and higher-level constructors.

pub fn fill_default<T: Clone + Default>(size: usize) -> Vec<T> {
    vec![T::default(); size]
}