Trait boxext::Zero [] [src]

pub unsafe trait Zero: Sized { }

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));
}
This example deliberately fails to compile
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();
}

Implementations on Foreign Types

impl Zero for u8
[src]

impl Zero for u16
[src]

impl Zero for u32
[src]

impl Zero for u64
[src]

impl Zero for usize
[src]

impl Zero for i8
[src]

impl Zero for i16
[src]

impl Zero for i32
[src]

impl Zero for i64
[src]

impl Zero for isize
[src]

impl Zero for f32
[src]

impl Zero for f64
[src]

impl<T> Zero for *mut T
[src]

impl<T> Zero for *const T
[src]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<A: Zero> Zero for (A,)
[src]

impl<A: Zero, B: Zero> Zero for (A, B)
[src]

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

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

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

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

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

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)
[src]

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)
[src]

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)
[src]

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)
[src]

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)
[src]

Implementors