# 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"
[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" }
-#![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>() -> T { Default::default() }
-
-pub struct AutoStackVec<T, B> {
- used: usize,
- ph: PhantomData<T>,
- buf: B,
-}
-
-impl<T,B> Deref for AutoStackVec<T, B> where B: Buffer<T> {
- 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<T,B> Debug for AutoStackVec<T, B> where B: Buffer<T>, 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<T, B> {
- earlier: B,
- item: MaybeUninit<T>,
-}
-
-pub unsafe trait Buffer<T> {
- fn len() -> usize;
- fn raw_ptr(&self) -> *const MaybeUninit<T> { self as *const _ as _ }
- fn raw_mut(&mut self) -> *mut MaybeUninit<T> { self as *mut _ as _ }
-}
-unsafe impl<T> Buffer<T> for () {
- fn len() -> usize { 0 }
-}
-unsafe impl<T,B> Buffer<T> for Buf1<T, B> where B: Buffer<T> {
- fn len() -> usize { B::len() + 1 }
-}
-
-impl<T> AutoStackVec<T, ()> {
- pub fn new() -> Self {
- AutoStackVec {
- used: 0,
- ph: PhantomData,
- buf: (),
- }
- }
-}
-
-impl<T,B> AutoStackVec<T, B> where B: Buffer<T> {
- pub fn push_none(mut self) -> AutoStackVec<T, Buf1<T, B>> {
- 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<T, Buf1<T, B>> {
- 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<T>) -> AutoStackVec<T, Buf1<T, B>> {
- if let Some(item) = item {
- self.push(item)
- } else {
- self.push_none()
- }
- }
-}
-
-fn main(){
- let asv = AutoStackVec::<i32,_>::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);
-}