box_raw_ptr 0.2.4

A Rust library providing safe wrappers for working with raw pointers, specifically `*const T` and `*mut T`. These wrappers ensure memory safety by encapsulating the raw pointers in safe abstractions and providing safe methods for working with them.
Documentation
box_raw_ptr-0.2.4 has been yanked.

box_raw_ptr

box_raw_ptr is a Rust library providing safe wrappers for working with raw pointers, specifically *const T and *mut T. These wrappers ensure memory safety by encapsulating the raw pointers in safe abstractions and providing safe methods for working with them.

Description

box_raw_ptr is a Rust library that offers safe wrappers for working with raw pointers, specifically *const T and *mut T. These wrappers ensure memory safety by encapsulating the raw pointers within safe abstractions and providing methods that guarantee safe usage.

Features

  • ConstRawPtr: A wrapper for *const T providing methods for safely working with constant raw pointers.
  • MutRawPtr: A wrapper for *mut T providing methods for safely working with mutable raw pointers.

Example

use box_raw_ptr::{const_raw_ptr::ConstRawPtr, mut_raw_ptr::MutRawPtr};

fn main() {
    // Create New Const Pointer
    let raw_ptr: ConstRawPtr<i32> = ConstRawPtr::new_const_ptr(&1 as *const i32);

    // Print the value pointed to by the raw pointer
    raw_ptr.print_const_ptr(false);

    // Unwrap and Deref Box<*const T> To Option<T>
    raw_ptr.unwrap_const();

    // Create const NULL pointer
    let null_ptr: ConstRawPtr<&str> = ConstRawPtr::const_null_ptr();

    // Unwrap Box<*const T> To *const T to check if NULL
    if null_ptr.is_null() {
        println!("NULL");
    }

    // Create New Mut Pointer
    let mut_ptr: MutRawPtr<u8> = MutRawPtr::new_mut_ptr(&mut 13_u8 as *mut u8);

    // Cast MutRawPtr<T> To Option<*mut U>
    let u_ptr: *mut i32 = mut_ptr.mut_cast_ptr::<i32>().unwrap();

    match MutRawPtr::new_mut_ptr(u_ptr).write_mut_ptr(20 as i32) {
        Some(ptr) => {
            // Print Derefenced MutRawPtr
            ptr.print_mut_ptr(true);
        }
        None => (),
    }

    // Pointer Arithmetic For An [T; usize] That Returns The Index Value In The Array 
    let arr: [i32; 5] = [1,2,3,4,5];

    let arr_ptr: ConstRawPtr<i32> = ConstRawPtr::new_const_ptr(arr.as_ptr());

    ConstRawPtr::set_idx_ptr(&arr_ptr, 2)
        .inspect(|x| {
            let t: i32 = x.clone().unwrap_const().unwrap();
            // 2 Indexed From arr Equals 3
            assert_eq!(3, t);
        });
}