Compare commits

...

2 commits

Author SHA1 Message Date
Christoph J. Scherr
fcce2500f0 bool dump 2023-09-19 18:15:06 +02:00
Christoph J. Scherr
8ec7bd2b38 working bool dump 2023-09-19 17:47:41 +02:00
4 changed files with 47 additions and 2 deletions

4
Cargo.lock generated
View file

@ -34,3 +34,7 @@ checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
[[package]]
name = "rs-unsafe"
version = "0.1.0"
[[package]]
name = "what-is"
version = "0.1.0"

View file

@ -1,11 +1,13 @@
[workspace]
members = [
".",
"members/c-bindings"
"members/c-bindings",
"members/what-is",
]
default-members = [
".",
"members/c-bindings"
"members/c-bindings",
"members/what-is",
]
[package]

View file

@ -0,0 +1,8 @@
[package]
name = "what-is"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View file

@ -0,0 +1,31 @@
use std::any::{TypeId, type_name};
use std::mem::*;
use std::fmt::Debug;
//* # See what's behind the primitive datatypes of Rust
//*
//* This Crate shows off, how primitive Types of rust are stored in memory.
fn main() {
let mut items = Vec::new();
items.push(true);
items.push(false);
dump_type::<bool>(items);
}
fn dump_type<T: Debug + 'static>(items: Vec<T>) {
println!("Type:\t{}", type_name::<T>());
println!("\tID:\t{:?}", TypeId::of::<T>());
println!("\tItems:");
unsafe {
for (index, item) in items.iter().enumerate() {
let pointer = item as *const T;
let raw_pointer = pointer as *const u8;
println!("\t{index:02x}\titem:\t{item:?}\n\
\t\tpointer: {:X?}\n\
\t\tmemory: {:X?}",
pointer,
*raw_pointer,
);
}
}
}