gecko-dev/third_party/rust/memoffset
Bastien Orivel faf6cad78c Bug 1580908 - Part 10: Revendor dependencies. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D45719

--HG--
rename : third_party/rust/regex-0.2.2/src/freqs.rs => third_party/rust/aho-corasick/src/byte_frequencies.rs
rename : third_party/rust/crc/Cargo.toml => third_party/rust/blake2b_simd/Cargo.toml
rename : third_party/rust/miniz_oxide_c_api/LICENSE => third_party/rust/miniz_oxide/LICENSE
rename : third_party/rust/redox_users/tests/group => third_party/rust/redox_users/tests/etc/group
rename : third_party/rust/redox_users/tests/passwd => third_party/rust/redox_users/tests/etc/passwd
rename : third_party/rust/redox_users/tests/shadow => third_party/rust/redox_users/tests/etc/shadow
rename : third_party/rust/utf8-ranges/src/lib.rs => third_party/rust/regex-syntax/src/utf8.rs
rename : third_party/rust/crossbeam-channel/LICENSE-APACHE => third_party/rust/rust-argon2/LICENSE-APACHE
rename : third_party/rust/memchr-1.0.2/COPYING => third_party/rust/winapi-util/COPYING
rename : third_party/rust/ucd-util/Cargo.toml => third_party/rust/winapi-util/Cargo.toml
rename : third_party/rust/memchr-1.0.2/LICENSE-MIT => third_party/rust/winapi-util/LICENSE-MIT
rename : third_party/rust/memchr-1.0.2/UNLICENSE => third_party/rust/winapi-util/UNLICENSE
extra : moz-landing-system : lando
2019-09-12 21:46:32 +00:00
..
src
.cargo-checksum.json
Cargo.toml
LICENSE
README.md
build.rs

README.md

memoffset

C-Like offset_of functionality for Rust structs.

Introduces the following macros:

  • offset_of! for obtaining the offset of a member of a struct.
  • span_of! for obtaining the range that a field, or fields, span.

memoffset works under no_std environments.

Usage

Add the following dependency to your Cargo.toml:

[dependencies]
memoffset = "0.3"

Versions ">= 0.3" can be used in a constant expression context (though not in a const fn), but require a rust version greater than or equal to 1.33. These versions will compile fine with rustc versions greater or equal to 1.19, but will lack support for constant expression.

If you wish to use an older rustc version, lock your dependency to "0.2"

Add the following lines at the top of your main.rs or lib.rs files.

#[macro_use]
extern crate memoffset;

Examples

#[repr(C, packed)]
struct Foo {
	a: u32,
	b: u32,
	c: [u8; 5],
	d: u32,
}

assert_eq!(offset_of!(Foo, b), 4);
assert_eq!(offset_of!(Foo, c[3]), 11);

assert_eq!(span_of!(Foo, a),          0..4);
assert_eq!(span_of!(Foo, a ..  c),    0..8);
assert_eq!(span_of!(Foo, a ..  c[1]), 0..9);
assert_eq!(span_of!(Foo, a ..= c[1]), 0..10);
assert_eq!(span_of!(Foo, ..= d),      0..14);
assert_eq!(span_of!(Foo, b ..),       4..17);