From 1e5d03dc9c419de7a52ea590b3576c3d6ca18d67 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 11 Apr 2023 16:28:00 +0100 Subject: [PATCH] new thing --- Cargo.lock | 223 ---------------------------------------------------- Cargo.toml | 10 +-- src/main.rs | 111 ++------------------------ 3 files changed, 11 insertions(+), 333 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e816493..0e5399e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,229 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "darling" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" -source = "git+https://github.com/ijackson/rust-derive-builder?rev=ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe#ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" -source = "git+https://github.com/ijackson/rust-derive-builder?rev=4516209ce98f6506bf729aa7cdbced97747f7dd1#4516209ce98f6506bf729aa7cdbced97747f7dd1" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.11.2" -source = "git+https://github.com/ijackson/rust-derive-builder?rev=a69d5eee830bddd5ff9b146b51e27580b1a7b6b0#a69d5eee830bddd5ff9b146b51e27580b1a7b6b0" -dependencies = [ - "derive_builder_core", - "syn", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "foo" version = "0.1.0" -dependencies = [ - "derive_builder", - "ron", - "serde", - "serde-value", - "serde_json", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "itoa" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "ordered-float" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" -dependencies = [ - "num-traits", -] - -[[package]] -name = "proc-macro2" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "ron" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" -dependencies = [ - "base64", - "bitflags", - "serde", -] - -[[package]] -name = "ryu" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" - -[[package]] -name = "serde" -version = "1.0.136" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float", - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.136" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "syn" -version = "1.0.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/Cargo.toml b/Cargo.toml index 3b562af..66fa8d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,8 @@ edition = "2021" [dependencies] #tokio = { version = "1", features = ["full"] } -serde-value = "0.7" -serde = { version="1", features=["derive"] } -ron = "*" -serde_json = "*" -derive_builder = { version = "0.11.2", git = "https://github.com/ijackson/rust-derive-builder", rev = "ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe" } +#serde-value = "0.7" +#serde = { version="1", features=["derive"] } +#ron = "*" +#serde_json = "*" +#derive_builder = { version = "0.11.2", git = "https://github.com/ijackson/rust-derive-builder", rev = "ba0c1a5311bd9f93ddf5f5b8ec2a5f6f03b22fbe" } diff --git a/src/main.rs b/src/main.rs index 68aef45..132da24 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,110 +1,11 @@ -#![allow(dead_code)] -#![allow(unused_variables)] -#![allow(unused_imports)] -#![feature(bench_black_box)] -use std::fmt::{self, Debug}; -use std::hint::black_box; -use std::marker::PhantomData; -use std::mem; -use std::mem::MaybeUninit; -use std::ops::Deref; - -pub fn default() -> T { Default::default() } - -pub struct AutoStackVec { - used: usize, - ph: PhantomData, - buf: B, -} - -impl Deref for AutoStackVec where B: Buffer { - type Target = [T]; - fn deref(&self) -> &[T] { - unsafe { - std::slice::from_raw_parts( - self.buf.raw_ptr() as _, - self.used, - ) - } +mod private_outer { + mod private_inner_ref { + /// Consumes a `crate::private_outer::private_inner_def::Item`. + fn t(_: Item) { } } -} -impl Debug for AutoStackVec where B: Buffer, T: Debug { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - <[T] as Debug>::fmt(&*self, f) + mod private_inner_def { + struct Item; } } - -#[repr(C)] -pub struct Buf1 { - earlier: B, - item: MaybeUninit, -} - -pub unsafe trait Buffer { - fn len() -> usize; - fn raw_ptr(&self) -> *const MaybeUninit { self as *const _ as _ } - fn raw_mut(&mut self) -> *mut MaybeUninit { self as *mut _ as _ } -} -unsafe impl Buffer for () { - fn len() -> usize { 0 } -} -unsafe impl Buffer for Buf1 where B: Buffer { - fn len() -> usize { B::len() + 1 } -} - -impl AutoStackVec { - pub fn new() -> Self { - AutoStackVec { - used: 0, - ph: PhantomData, - buf: (), - } - } -} - -impl AutoStackVec where B: Buffer { - pub fn push_none(mut self) -> AutoStackVec> { - let mut out = AutoStackVec { - used: 0, - ph: self.ph, - buf: Buf1 { - earlier: self.buf, - item: MaybeUninit::uninit(), - }, - }; - out.used = self.used; - self.used = 0; - out - } - - pub fn push(self, item: T) -> AutoStackVec> { - unsafe { - let mut out = self.push_none(); - let item = MaybeUninit::new(item); - (out.buf.raw_mut()) - .add(out.used) - .write(item); - out.used += 1; - out - } - } - - pub fn push_option(self, item: Option) -> AutoStackVec> { - if let Some(item) = item { - self.push(item) - } else { - self.push_none() - } - } -} - -fn main(){ - let asv = AutoStackVec::::new(); - let asv = asv.push(black_box(42)); - let asv = asv.push_option(black_box(None)); - let asv = asv.push_none(); - let asv = asv.push(black_box(63)); - eprintln!("N {:?}", asv); -} -- 2.30.2