chiark / gitweb /
new thing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 11 Apr 2023 15:28:00 +0000 (16:28 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 11 Apr 2023 15:28:00 +0000 (16:28 +0100)
Cargo.lock
Cargo.toml
src/main.rs

index e8164938790d0a00b632f60de2d792adf657289a..0e5399e665c4621039bfb037ecf89b5765ce4cd6 100644 (file)
@@ -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"
index 3b562afde5bb6cf45779b54a4fa4944c5d50f9cb..66fa8d016c917aa1a358f44ab7bb2dbe9c36b32c 100644 (file)
@@ -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" }
index 68aef456152670a199fda7498756c1f499f8f691..132da2487d791f915d384f64b5ae566ed037dc30 100644 (file)
-#![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);
-}