add utility impls for SimValue<ArrayType<_, _>>
This commit is contained in:
parent
df020e9c9b
commit
17b58e8edb
1 changed files with 70 additions and 2 deletions
|
|
@ -23,10 +23,10 @@ use bitvec::{slice::BitSlice, vec::BitVec};
|
||||||
use hashbrown::hash_map::Entry;
|
use hashbrown::hash_map::Entry;
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as _, ser::Error as _};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as _, ser::Error as _};
|
||||||
use std::{
|
use std::{
|
||||||
borrow::Cow,
|
borrow::{Borrow, BorrowMut, Cow},
|
||||||
fmt::{self, Write},
|
fmt::{self, Write},
|
||||||
hash::{BuildHasher, Hash, Hasher, RandomState},
|
hash::{BuildHasher, Hash, Hasher, RandomState},
|
||||||
ops::{Deref, DerefMut},
|
ops::{Deref, DerefMut, Index, IndexMut},
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -364,6 +364,74 @@ impl<T: Type> ToExpr for SimValue<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size, I> Index<I> for SimValue<ArrayType<T, Len>>
|
||||||
|
where
|
||||||
|
[SimValue<T>]: Index<I>,
|
||||||
|
{
|
||||||
|
type Output = <[SimValue<T>] as Index<I>>::Output;
|
||||||
|
|
||||||
|
fn index(&self, index: I) -> &Self::Output {
|
||||||
|
(**self).borrow().index(index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size, I> IndexMut<I> for SimValue<ArrayType<T, Len>>
|
||||||
|
where
|
||||||
|
[SimValue<T>]: IndexMut<I>,
|
||||||
|
{
|
||||||
|
fn index_mut(&mut self, index: I) -> &mut Self::Output {
|
||||||
|
(**self).borrow_mut().index_mut(index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size> SimValue<ArrayType<T, Len>> {
|
||||||
|
pub fn iter(&self) -> std::slice::Iter<'_, SimValue<T>> {
|
||||||
|
(**self).borrow().iter()
|
||||||
|
}
|
||||||
|
pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, SimValue<T>> {
|
||||||
|
(**self).borrow_mut().iter_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size> IntoIterator for SimValue<ArrayType<T, Len>> {
|
||||||
|
type Item = SimValue<T>;
|
||||||
|
type IntoIter = std::vec::IntoIter<SimValue<T>>;
|
||||||
|
|
||||||
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
|
Vec::into_iter(Self::into_value(self).into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type, Len: Size> IntoIterator for &'a SimValue<ArrayType<T, Len>> {
|
||||||
|
type Item = &'a SimValue<T>;
|
||||||
|
type IntoIter = std::slice::Iter<'a, SimValue<T>>;
|
||||||
|
|
||||||
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
|
self.iter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type, Len: Size> IntoIterator for &'a mut SimValue<ArrayType<T, Len>> {
|
||||||
|
type Item = &'a mut SimValue<T>;
|
||||||
|
type IntoIter = std::slice::IterMut<'a, SimValue<T>>;
|
||||||
|
|
||||||
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
|
self.iter_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size> AsRef<[SimValue<T>]> for SimValue<ArrayType<T, Len>> {
|
||||||
|
fn as_ref(&self) -> &[SimValue<T>] {
|
||||||
|
(**self).as_ref()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size> AsMut<[SimValue<T>]> for SimValue<ArrayType<T, Len>> {
|
||||||
|
fn as_mut(&mut self) -> &mut [SimValue<T>] {
|
||||||
|
(**self).as_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait SimValuePartialEq<T: Type = Self>: Type {
|
pub trait SimValuePartialEq<T: Type = Self>: Type {
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn sim_value_eq(this: &SimValue<Self>, other: &SimValue<T>) -> bool;
|
fn sim_value_eq(this: &SimValue<Self>, other: &SimValue<T>) -> bool;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue