From 5c80fb8d6481ad9fe3c62cd5d7b06ca317f37676 Mon Sep 17 00:00:00 2001 From: Lukasz Anforowicz Date: Thu, 12 May 2022 19:09:55 +0000 Subject: [PATCH] impl Copy for Aligned where ... T: Copy. --- src/lib.rs | 23 +++++++++++++++++++++-- src/sealed.rs | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8d28466..acc016c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -29,33 +29,44 @@ #![deny(warnings)] #![cfg_attr(not(test), no_std)] -use core::{cmp::Ordering, fmt::{Display, Debug}, hash::{Hash, Hasher}, ops}; +use core::{ + cmp::Ordering, + fmt::{Debug, Display}, + hash::{Hash, Hasher}, + ops, +}; use as_slice::{AsMutSlice, AsSlice}; mod sealed; /// 2-byte alignment +#[derive(Clone, Copy)] #[repr(align(2))] pub struct A2; /// 4-byte alignment +#[derive(Clone, Copy)] #[repr(align(4))] pub struct A4; /// 8-byte alignment +#[derive(Clone, Copy)] #[repr(align(8))] pub struct A8; /// 16-byte alignment +#[derive(Clone, Copy)] #[repr(align(16))] pub struct A16; /// 32-byte alignment +#[derive(Clone, Copy)] #[repr(align(32))] pub struct A32; /// 64-byte alignment +#[derive(Clone, Copy)] #[repr(align(64))] pub struct A64; @@ -146,6 +157,13 @@ where } } +impl Copy for Aligned +where + A: sealed::Alignment, + T: Copy, +{ +} + impl Default for Aligned where A: sealed::Alignment, @@ -193,7 +211,8 @@ impl Eq for Aligned where A: sealed::Alignment, T: Eq, -{} +{ +} impl Hash for Aligned where diff --git a/src/sealed.rs b/src/sealed.rs index 018f7ab..a266d46 100644 --- a/src/sealed.rs +++ b/src/sealed.rs @@ -1,4 +1,4 @@ -pub trait Alignment {} +pub trait Alignment: Copy {} impl Alignment for super::A2 {} impl Alignment for super::A4 {}