// Copyright 2023 The Fuchsia Authors // // Licensed under a BSD-style license , Apache License, Version 2.0 // , or the MIT // license , at your option. // This file may not be copied, modified, or distributed except according to // those terms. //! Abstractions over raw pointers. mod inner; #[doc(hidden)] pub mod invariant; mod ptr; mod transmute; #[doc(hidden)] pub use {inner::PtrInner, transmute::*}; #[doc(hidden)] pub use { invariant::{BecauseExclusive, BecauseImmutable, Read}, ptr::Ptr, }; /// A shorthand for a maybe-valid, maybe-aligned reference. Used as the argument /// to [`TryFromBytes::is_bit_valid`]. /// /// [`TryFromBytes::is_bit_valid`]: crate::TryFromBytes::is_bit_valid pub type Maybe<'a, T, Aliasing = invariant::Shared, Alignment = invariant::Unaligned> = Ptr<'a, T, (Aliasing, Alignment, invariant::Initialized)>; /// Checks if the referent is zeroed. pub(crate) fn is_zeroed(ptr: Ptr<'_, T, I>) -> bool where T: crate::Immutable + crate::KnownLayout, I: invariant::Invariants, I::Aliasing: invariant::Reference, { ptr.as_bytes::().as_ref().iter().all(|&byte| byte == 0) }