forked from M-Labs/nac3
1
0
Fork 0

unification table: modified conversion impl

from UnificationTable<Rc<RefCell<T>> <==> UnificationTable<T>
to UnificationTable<Rc<T>> <==> UnificationTable<T>
This commit is contained in:
pca006132 2021-08-03 12:35:58 +08:00
parent d4807293b0
commit 52dc112410
1 changed files with 7 additions and 28 deletions

View File

@ -1,4 +1,3 @@
use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
#[derive(Copy, Clone, PartialEq, Eq, Debug)] #[derive(Copy, Clone, PartialEq, Eq, Debug)]
@ -12,11 +11,7 @@ pub struct UnificationTable<V> {
impl<V> UnificationTable<V> { impl<V> UnificationTable<V> {
pub fn new() -> UnificationTable<V> { pub fn new() -> UnificationTable<V> {
UnificationTable { UnificationTable { parents: Vec::new(), ranks: Vec::new(), values: Vec::new() }
parents: Vec::new(),
ranks: Vec::new(),
values: Vec::new(),
}
} }
pub fn new_key(&mut self, v: V) -> UnificationKey { pub fn new_key(&mut self, v: V) -> UnificationKey {
@ -72,33 +67,17 @@ impl<V> UnificationTable<V> {
} }
} }
impl<V> UnificationTable<Rc<RefCell<V>>> impl<V> UnificationTable<Rc<V>>
where where
V: Clone, V: Clone,
{ {
pub fn into_send(self) -> UnificationTable<V> { pub fn into_send(self) -> UnificationTable<V> {
let values = self let values = self.values.iter().map(|v| v.as_ref().clone()).collect();
.values UnificationTable { parents: self.parents, ranks: self.ranks, values }
.iter()
.map(|v| v.as_ref().borrow().clone())
.collect();
UnificationTable {
parents: self.parents,
ranks: self.ranks,
values,
}
} }
pub fn from_send(table: UnificationTable<V>) -> UnificationTable<Rc<RefCell<V>>> { pub fn from_send(table: UnificationTable<V>) -> UnificationTable<Rc<V>> {
let values = table let values = table.values.into_iter().map(Rc::new).collect();
.values UnificationTable { parents: table.parents, ranks: table.ranks, values }
.into_iter()
.map(|v| Rc::new(RefCell::new(v)))
.collect();
UnificationTable {
parents: table.parents,
ranks: table.ranks,
values,
}
} }
} }