remove some old manual implementations of helpers

This commit is contained in:
Evan Almloff 2024-01-23 11:29:13 -06:00
parent 7f93263357
commit 94c0c2e5b9
3 changed files with 44 additions and 33 deletions

View file

@ -293,7 +293,7 @@ impl RouterContext {
fn change_route(&self) -> Option<ExternalNavigationFailure> { fn change_route(&self) -> Option<ExternalNavigationFailure> {
let self_read = self.inner.read(); let self_read = self.inner.read();
if let Some(callback) = &self_read.routing_callback { if let Some(callback) = &self_read.routing_callback {
let myself = self.clone(); let myself = *self;
let callback = callback.clone(); let callback = callback.clone();
drop(self_read); drop(self_read);
if let Some(new) = callback(myself) { if let Some(new) = callback(myself) {

View file

@ -1,13 +1,12 @@
use crate::read::Readable; use crate::read::Readable;
use crate::read::ReadableVecExt; use crate::read::ReadableVecExt;
use crate::rt::CopyValue; use crate::rt::CopyValue;
use crate::signal::{Signal, Write}; use crate::signal::Signal;
use crate::write::Writable; use crate::write::Writable;
use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, ReadableValueIterator, SignalData}; use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, ReadableValueIterator, SignalData};
use generational_box::UnsyncStorage;
use generational_box::{AnyStorage, Storage}; use generational_box::{AnyStorage, Storage};
use generational_box::{GenerationalRef, UnsyncStorage};
use std::cell::Ref;
use std::{ use std::{
fmt::{Debug, Display}, fmt::{Debug, Display},
ops::{Add, Div, Mul, Sub}, ops::{Add, Div, Mul, Sub},
@ -141,25 +140,6 @@ macro_rules! write_impls {
read_impls!(CopyValue, S: Storage<T>, S: Storage<Vec<T>>); read_impls!(CopyValue, S: Storage<T>, S: Storage<Vec<T>>);
write_impls!(CopyValue, Storage<T>, Storage<Vec<T>>); write_impls!(CopyValue, Storage<T>, Storage<Vec<T>>);
read_impls!(Signal, S: Storage<SignalData<T>>, S: Storage<SignalData<Vec<T>>>);
write_impls!(Signal, Storage<SignalData<T>>, Storage<SignalData<Vec<T>>>);
read_impls!(
ReadOnlySignal,
S: Storage<SignalData<T>>,
S: Storage<SignalData<Vec<T>>>
);
read_impls!(GlobalSignal);
read_impls!(GlobalMemo: PartialEq);
impl<T: PartialEq + 'static> GlobalMemo<Vec<T>> {
/// Read a value from the inner vector.
pub fn get(&'static self, index: usize) -> Option<GenerationalRef<Ref<'static, T>>> {
<UnsyncStorage as AnyStorage>::try_map(self.read(), move |v| v.get(index))
}
}
impl<T: 'static, S: Storage<Vec<T>>> IntoIterator for CopyValue<Vec<T>, S> { impl<T: 'static, S: Storage<Vec<T>>> IntoIterator for CopyValue<Vec<T>, S> {
type IntoIter = ReadableValueIterator<T, Self>; type IntoIter = ReadableValueIterator<T, Self>;
@ -170,12 +150,8 @@ impl<T: 'static, S: Storage<Vec<T>>> IntoIterator for CopyValue<Vec<T>, S> {
} }
} }
impl<T: 'static, S: Storage<Option<T>>> CopyValue<Option<T>, S> { read_impls!(Signal, S: Storage<SignalData<T>>, S: Storage<SignalData<Vec<T>>>);
/// Deref the inner value mutably. write_impls!(Signal, Storage<SignalData<T>>, Storage<SignalData<Vec<T>>>);
pub fn as_mut(&self) -> Option<S::Mut<T>> {
S::try_map_mut(self.write(), |v: &mut Option<T>| v.as_mut())
}
}
impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for Signal<Vec<T>, S> { impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for Signal<Vec<T>, S> {
type IntoIter = ReadableValueIterator<T, Self>; type IntoIter = ReadableValueIterator<T, Self>;
@ -187,9 +163,42 @@ impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for Signal<Vec<T>,
} }
} }
impl<T: 'static, S: Storage<SignalData<Option<T>>>> Signal<Option<T>, S> { read_impls!(
/// Returns a reference to an element or `None` if out of bounds. ReadOnlySignal,
pub fn as_mut(&mut self) -> Option<Write<T, S>> { S: Storage<SignalData<T>>,
Write::filter_map(self.write(), |v| v.as_mut()) S: Storage<SignalData<Vec<T>>>
);
impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for ReadOnlySignal<Vec<T>, S> {
type IntoIter = ReadableValueIterator<T, Self>;
type Item = S::Ref<T>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
read_impls!(GlobalSignal);
impl<T: 'static> IntoIterator for GlobalSignal<Vec<T>> {
type IntoIter = ReadableValueIterator<T, Self>;
type Item = <UnsyncStorage as AnyStorage>::Ref<T>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
read_impls!(GlobalMemo: PartialEq);
impl<T: PartialEq + 'static> IntoIterator for GlobalMemo<Vec<T>> {
type IntoIter = ReadableValueIterator<T, Self>;
type Item = <UnsyncStorage as AnyStorage>::Ref<T>;
fn into_iter(self) -> Self::IntoIter {
self.iter()
} }
} }

View file

@ -228,6 +228,7 @@ impl<T: 'static> Signal<T> {
} }
/// Creates a new global Signal that can be used in a global static. /// Creates a new global Signal that can be used in a global static.
#[track_caller]
pub const fn global(constructor: fn() -> T) -> GlobalSignal<T> { pub const fn global(constructor: fn() -> T) -> GlobalSignal<T> {
GlobalSignal::new(constructor) GlobalSignal::new(constructor)
} }
@ -235,6 +236,7 @@ impl<T: 'static> Signal<T> {
impl<T: PartialEq + 'static> Signal<T> { impl<T: PartialEq + 'static> Signal<T> {
/// Creates a new global Signal that can be used in a global static. /// Creates a new global Signal that can be used in a global static.
#[track_caller]
pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T> pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>
where where
T: PartialEq, T: PartialEq,