Zero

Trait Zero 

Source
pub unsafe trait Zero: Sized { }
Expand description

Trait indicating whether a value full of zeroes is valid.

This trait is used to enable the Box::new_zeroed method for types where it’s safe to use.

§Safety

Do not implement this trait for types where a raw byte array of 0 doesn’t represent a valid value for the type. Please double check it is valid and corresponds to what you want.

§Examples

extern crate boxext;
use boxext::{BoxExt, Zero};

#[derive(Debug, PartialEq)]
struct Foo(usize);

unsafe impl Zero for Foo {}

fn main() {
    // equivalent to `Box::new(Foo(0))`
    let buf: Box<Foo> = Box::new_zeroed();
    assert_eq!(*buf, Foo(0));
}

For convenience, a boxext_derive crate is provided that provides a custom derive for Zero.

extern crate boxext;
#[macro_use]
extern crate boxext_derive;
use boxext::BoxExt;

#[derive(Zero, Debug, PartialEq)]
struct Foo(usize);

fn main() {
    // equivalent to `Box::new(Foo(0))`
    let buf: Box<Foo> = Box::new_zeroed();
    assert_eq!(*buf, Foo(0));
}
extern crate boxext;
#[macro_use]
extern crate boxext_derive;
use boxext::BoxExt;

#[derive(Zero)]
//          ^ the trait `boxext::Zero` is not implemented for `Bar`
struct Foo(Bar);

struct Bar;

fn main() {
    // equivalent to `Box::new(Foo(0))`
    let buf: Box<Foo> = Box::new_zeroed();
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Zero for f32

Source§

impl Zero for f64

Source§

impl Zero for i8

Source§

impl Zero for i16

Source§

impl Zero for i32

Source§

impl Zero for i64

Source§

impl Zero for isize

Source§

impl Zero for u8

Source§

impl Zero for u16

Source§

impl Zero for u32

Source§

impl Zero for u64

Source§

impl Zero for usize

Source§

impl<A: Zero> Zero for (A,)

Source§

impl<A: Zero, B: Zero> Zero for (A, B)

Source§

impl<A: Zero, B: Zero, C: Zero> Zero for (A, B, C)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero> Zero for (A, B, C, D)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero> Zero for (A, B, C, D, E)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero> Zero for (A, B, C, D, E, F)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero> Zero for (A, B, C, D, E, F, G)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero, H: Zero> Zero for (A, B, C, D, E, F, G, H)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero, H: Zero, I: Zero> Zero for (A, B, C, D, E, F, G, H, I)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero, H: Zero, I: Zero, J: Zero> Zero for (A, B, C, D, E, F, G, H, I, J)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero, H: Zero, I: Zero, J: Zero, K: Zero> Zero for (A, B, C, D, E, F, G, H, I, J, K)

Source§

impl<A: Zero, B: Zero, C: Zero, D: Zero, E: Zero, F: Zero, G: Zero, H: Zero, I: Zero, J: Zero, K: Zero, L: Zero> Zero for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

impl<T> Zero for *const T

Source§

impl<T> Zero for *mut T

Source§

impl<T: Zero> Zero for [T; 1]

Source§

impl<T: Zero> Zero for [T; 2]

Source§

impl<T: Zero> Zero for [T; 3]

Source§

impl<T: Zero> Zero for [T; 4]

Source§

impl<T: Zero> Zero for [T; 5]

Source§

impl<T: Zero> Zero for [T; 6]

Source§

impl<T: Zero> Zero for [T; 7]

Source§

impl<T: Zero> Zero for [T; 8]

Source§

impl<T: Zero> Zero for [T; 9]

Source§

impl<T: Zero> Zero for [T; 10]

Source§

impl<T: Zero> Zero for [T; 11]

Source§

impl<T: Zero> Zero for [T; 12]

Source§

impl<T: Zero> Zero for [T; 13]

Source§

impl<T: Zero> Zero for [T; 14]

Source§

impl<T: Zero> Zero for [T; 15]

Source§

impl<T: Zero> Zero for [T; 16]

Source§

impl<T: Zero> Zero for [T; 17]

Source§

impl<T: Zero> Zero for [T; 18]

Source§

impl<T: Zero> Zero for [T; 19]

Source§

impl<T: Zero> Zero for [T; 20]

Source§

impl<T: Zero> Zero for [T; 21]

Source§

impl<T: Zero> Zero for [T; 22]

Source§

impl<T: Zero> Zero for [T; 23]

Source§

impl<T: Zero> Zero for [T; 24]

Source§

impl<T: Zero> Zero for [T; 25]

Source§

impl<T: Zero> Zero for [T; 26]

Source§

impl<T: Zero> Zero for [T; 27]

Source§

impl<T: Zero> Zero for [T; 28]

Source§

impl<T: Zero> Zero for [T; 29]

Source§

impl<T: Zero> Zero for [T; 30]

Source§

impl<T: Zero> Zero for [T; 31]

Source§

impl<T: Zero> Zero for [T; 32]

Source§

impl<T: Zero> Zero for [T; 33]

Source§

impl<T: Zero> Zero for [T; 34]

Source§

impl<T: Zero> Zero for [T; 35]

Source§

impl<T: Zero> Zero for [T; 36]

Source§

impl<T: Zero> Zero for [T; 37]

Source§

impl<T: Zero> Zero for [T; 38]

Source§

impl<T: Zero> Zero for [T; 39]

Source§

impl<T: Zero> Zero for [T; 40]

Source§

impl<T: Zero> Zero for [T; 41]

Source§

impl<T: Zero> Zero for [T; 42]

Source§

impl<T: Zero> Zero for [T; 43]

Source§

impl<T: Zero> Zero for [T; 44]

Source§

impl<T: Zero> Zero for [T; 45]

Source§

impl<T: Zero> Zero for [T; 46]

Source§

impl<T: Zero> Zero for [T; 47]

Source§

impl<T: Zero> Zero for [T; 48]

Source§

impl<T: Zero> Zero for [T; 49]

Source§

impl<T: Zero> Zero for [T; 50]

Source§

impl<T: Zero> Zero for [T; 51]

Source§

impl<T: Zero> Zero for [T; 52]

Source§

impl<T: Zero> Zero for [T; 53]

Source§

impl<T: Zero> Zero for [T; 54]

Source§

impl<T: Zero> Zero for [T; 55]

Source§

impl<T: Zero> Zero for [T; 56]

Source§

impl<T: Zero> Zero for [T; 57]

Source§

impl<T: Zero> Zero for [T; 58]

Source§

impl<T: Zero> Zero for [T; 59]

Source§

impl<T: Zero> Zero for [T; 60]

Source§

impl<T: Zero> Zero for [T; 61]

Source§

impl<T: Zero> Zero for [T; 62]

Source§

impl<T: Zero> Zero for [T; 63]

Source§

impl<T: Zero> Zero for [T; 64]

Source§

impl<T: Zero> Zero for [T; 65]

Source§

impl<T: Zero> Zero for [T; 66]

Source§

impl<T: Zero> Zero for [T; 67]

Source§

impl<T: Zero> Zero for [T; 68]

Source§

impl<T: Zero> Zero for [T; 69]

Source§

impl<T: Zero> Zero for [T; 70]

Source§

impl<T: Zero> Zero for [T; 71]

Source§

impl<T: Zero> Zero for [T; 72]

Source§

impl<T: Zero> Zero for [T; 73]

Source§

impl<T: Zero> Zero for [T; 74]

Source§

impl<T: Zero> Zero for [T; 75]

Source§

impl<T: Zero> Zero for [T; 76]

Source§

impl<T: Zero> Zero for [T; 77]

Source§

impl<T: Zero> Zero for [T; 78]

Source§

impl<T: Zero> Zero for [T; 79]

Source§

impl<T: Zero> Zero for [T; 80]

Source§

impl<T: Zero> Zero for [T; 81]

Source§

impl<T: Zero> Zero for [T; 82]

Source§

impl<T: Zero> Zero for [T; 83]

Source§

impl<T: Zero> Zero for [T; 84]

Source§

impl<T: Zero> Zero for [T; 85]

Source§

impl<T: Zero> Zero for [T; 86]

Source§

impl<T: Zero> Zero for [T; 87]

Source§

impl<T: Zero> Zero for [T; 88]

Source§

impl<T: Zero> Zero for [T; 89]

Source§

impl<T: Zero> Zero for [T; 90]

Source§

impl<T: Zero> Zero for [T; 91]

Source§

impl<T: Zero> Zero for [T; 92]

Source§

impl<T: Zero> Zero for [T; 93]

Source§

impl<T: Zero> Zero for [T; 94]

Source§

impl<T: Zero> Zero for [T; 95]

Source§

impl<T: Zero> Zero for [T; 96]

Source§

impl<T: Zero> Zero for [T; 97]

Source§

impl<T: Zero> Zero for [T; 98]

Source§

impl<T: Zero> Zero for [T; 99]

Source§

impl<T: Zero> Zero for [T; 100]

Source§

impl<T: Zero> Zero for [T; 101]

Source§

impl<T: Zero> Zero for [T; 102]

Source§

impl<T: Zero> Zero for [T; 103]

Source§

impl<T: Zero> Zero for [T; 104]

Source§

impl<T: Zero> Zero for [T; 105]

Source§

impl<T: Zero> Zero for [T; 106]

Source§

impl<T: Zero> Zero for [T; 107]

Source§

impl<T: Zero> Zero for [T; 108]

Source§

impl<T: Zero> Zero for [T; 109]

Source§

impl<T: Zero> Zero for [T; 110]

Source§

impl<T: Zero> Zero for [T; 111]

Source§

impl<T: Zero> Zero for [T; 112]

Source§

impl<T: Zero> Zero for [T; 113]

Source§

impl<T: Zero> Zero for [T; 114]

Source§

impl<T: Zero> Zero for [T; 115]

Source§

impl<T: Zero> Zero for [T; 116]

Source§

impl<T: Zero> Zero for [T; 117]

Source§

impl<T: Zero> Zero for [T; 118]

Source§

impl<T: Zero> Zero for [T; 119]

Source§

impl<T: Zero> Zero for [T; 120]

Source§

impl<T: Zero> Zero for [T; 121]

Source§

impl<T: Zero> Zero for [T; 122]

Source§

impl<T: Zero> Zero for [T; 123]

Source§

impl<T: Zero> Zero for [T; 124]

Source§

impl<T: Zero> Zero for [T; 125]

Source§

impl<T: Zero> Zero for [T; 126]

Source§

impl<T: Zero> Zero for [T; 127]

Source§

impl<T: Zero> Zero for [T; 128]

Source§

impl<T: Zero> Zero for [T; 160]

Source§

impl<T: Zero> Zero for [T; 192]

Source§

impl<T: Zero> Zero for [T; 200]

Source§

impl<T: Zero> Zero for [T; 224]

Source§

impl<T: Zero> Zero for [T; 256]

Source§

impl<T: Zero> Zero for [T; 384]

Source§

impl<T: Zero> Zero for [T; 512]

Source§

impl<T: Zero> Zero for [T; 768]

Source§

impl<T: Zero> Zero for [T; 1024]

Source§

impl<T: Zero> Zero for [T; 2048]

Source§

impl<T: Zero> Zero for [T; 4096]

Source§

impl<T: Zero> Zero for [T; 8192]

Source§

impl<T: Zero> Zero for [T; 16384]

Source§

impl<T: Zero> Zero for [T; 32768]

Source§

impl<T: Zero> Zero for [T; 65536]

Source§

impl<T: Zero> Zero for [T; 131072]

Source§

impl<T: Zero> Zero for [T; 262144]

Source§

impl<T: Zero> Zero for [T; 524288]

Source§

impl<T: Zero> Zero for [T; 1048576]

Source§

impl<T: Zero> Zero for [T; 2097152]

Source§

impl<T: Zero> Zero for [T; 4194304]

Source§

impl<T: Zero> Zero for [T; 8388608]

Source§

impl<T: Zero> Zero for [T; 16777216]

Source§

impl<T: Zero> Zero for [T; 33554432]

Source§

impl<T: Zero> Zero for [T; 67108864]

Source§

impl<T: Zero> Zero for [T; 134217728]

Source§

impl<T: Zero> Zero for [T; 268435456]

Source§

impl<T: Zero> Zero for [T; 536870912]

Source§

impl<T: Zero> Zero for [T; 1073741824]

Source§

impl<T: Zero> Zero for [T; 2147483648]

Source§

impl<T: Zero> Zero for [T; 4294967296]

Implementors§