Broader PartialEq implementation for types implementing Dim trait

This commit is contained in:
S.Brandeis 2020-01-19 03:02:05 +01:00
parent 0db48fe49c
commit 6f5c9c0f8e
1 changed files with 43 additions and 2 deletions

View File

@ -14,7 +14,7 @@ use typenum::{
use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde::{Deserialize, Deserializer, Serialize, Serializer};
/// Dim of dynamically-sized algebraic entities. /// Dim of dynamically-sized algebraic entities.
#[derive(Clone, Copy, Eq, PartialEq, Debug)] #[derive(Clone, Copy, Eq, Debug)]
pub struct Dynamic { pub struct Dynamic {
value: usize, value: usize,
} }
@ -107,6 +107,12 @@ impl Sub<usize> for Dynamic {
} }
} }
impl<T: Dim> PartialEq<T> for Dynamic {
fn eq(&self, other: &T) -> bool {
self.value() == other.value()
}
}
/* /*
* *
* Operations. * Operations.
@ -244,7 +250,7 @@ impl NamedDim for typenum::U1 {
macro_rules! named_dimension( macro_rules! named_dimension(
($($D: ident),* $(,)*) => {$( ($($D: ident),* $(,)*) => {$(
/// A type level dimension. /// A type level dimension.
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] #[derive(Debug, Copy, Clone, Hash, Eq)]
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
pub struct $D; pub struct $D;
@ -280,6 +286,12 @@ macro_rules! named_dimension(
} }
impl IsNotStaticOne for $D { } impl IsNotStaticOne for $D { }
impl<T: Dim> PartialEq<T> for $D {
fn eq(&self, other: &T) -> bool {
self.value() == other.value()
}
}
)*} )*}
); );
@ -367,6 +379,23 @@ impl<
{ {
} }
impl<
T: Dim,
A: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
B: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
C: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
D: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
E: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
F: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
G: Bit + Any + Debug + Copy + PartialEq + Send + Sync,
> PartialEq<T>
for UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, A>, B>, C>, D>, E>, F>, G>
{
fn eq(&self, other: &T) -> bool {
self.value() == other.value()
}
}
impl<U: Unsigned + DimName, B: Bit + Any + Debug + Copy + PartialEq + Send + Sync> NamedDim impl<U: Unsigned + DimName, B: Bit + Any + Debug + Copy + PartialEq + Send + Sync> NamedDim
for UInt<U, B> for UInt<U, B>
{ {
@ -408,3 +437,15 @@ impl<U: Unsigned + DimName, B: Bit + Any + Debug + Copy + PartialEq + Send + Syn
for UInt<U, B> for UInt<U, B>
{ {
} }
impl<
T: Dim,
U: Unsigned + DimName,
B: Bit + Any + Debug + Copy + PartialEq + Send + Sync
> PartialEq<T>
for UInt<U, B>
{
fn eq(&self, other: &T) -> bool {
self.value() == other.value()
}
}