Fiddle with fn get (unsuccessfully)
This commit is contained in:
parent
a33f96bc1d
commit
9aea564b2c
|
@ -74,7 +74,7 @@ pub trait Value<D: Domain>: Debug {
|
|||
fn has(&self, _v: &dyn Value<D>) -> bool { false }
|
||||
|
||||
fn is_dictionary(&self) -> bool { false }
|
||||
fn get<'v>(&'v self, _k: &'v dyn Value<D>) -> Option<&'v dyn Value<D>> { None }
|
||||
fn get(&self, _k: &(dyn Value<D> + 'static)) -> Option<&dyn Value<D>> { None }
|
||||
fn entries(&self) -> Option<Box<dyn Iterator<Item = (&dyn Value<D>, &dyn Value<D>)> + '_>> { None }
|
||||
|
||||
fn is_embedded(&self) -> bool { false }
|
||||
|
@ -105,7 +105,7 @@ impl<'a, D: Domain, V: Value<D> + ?Sized> Value<D> for &'a V {
|
|||
fn is_set(&self) -> bool { (*self).is_set() }
|
||||
fn has(&self, v: &dyn Value<D>) -> bool { (*self).has(v) }
|
||||
fn is_dictionary(&self) -> bool { (*self).is_dictionary() }
|
||||
fn get<'v>(&'v self, k: &'v dyn Value<D>) -> Option<&'v dyn Value<D>> { (*self).get(k) }
|
||||
fn get(&self, k: &(dyn Value<D> + 'static)) -> Option<&dyn Value<D>> { (*self).get(k) }
|
||||
fn entries(&self) -> Option<Box<dyn Iterator<Item = (&dyn Value<D>, &dyn Value<D>)> + '_>> { (*self).entries() }
|
||||
fn is_embedded(&self) -> bool { (*self).is_embedded() }
|
||||
fn embedded(&self) -> Option<Cow<'_, D>> { (*self).embedded() }
|
||||
|
@ -130,7 +130,7 @@ impl<D: Domain> Value<D> for Box<dyn Value<D>> {
|
|||
fn is_set(&self) -> bool { self.as_ref().is_set() }
|
||||
fn has(&self, v: &dyn Value<D>) -> bool { self.as_ref().has(v) }
|
||||
fn is_dictionary(&self) -> bool { self.as_ref().is_dictionary() }
|
||||
fn get<'v>(&'v self, k: &'v dyn Value<D>) -> Option<&'v dyn Value<D>> { self.as_ref().get(k) }
|
||||
fn get(&self, k: &(dyn Value<D> + 'static)) -> Option<&dyn Value<D>> { self.as_ref().get(k) }
|
||||
fn entries(&self) -> Option<Box<dyn Iterator<Item = (&dyn Value<D>, &dyn Value<D>)> + '_>> { self.as_ref().entries() }
|
||||
fn is_embedded(&self) -> bool { self.as_ref().is_embedded() }
|
||||
fn embedded(&self) -> Option<Cow<'_, D>> { self.as_ref().embedded() }
|
||||
|
@ -346,7 +346,7 @@ impl<D: Domain, V: Value<D>> Value<D> for Map<Box<dyn Value<D>>, V> {
|
|||
fn is_dictionary(&self) -> bool { true }
|
||||
fn len(&self) -> Option<usize> { Some(self.len()) }
|
||||
fn has(&self, v: &dyn Value<D>) -> bool { self.contains_key(v) }
|
||||
fn get<'v>(&'v self, k: &'v dyn Value<D>) -> Option<&'v dyn Value<D>> {
|
||||
fn get(&self, k: &(dyn Value<D> + 'static)) -> Option<&dyn Value<D>> {
|
||||
match Map::get(self, k) {
|
||||
Some(v) => Some(v),
|
||||
None => None,
|
||||
|
@ -395,7 +395,7 @@ impl<D: Domain, V: Value<D>> Value<D> for Annotations<D, V> {
|
|||
fn is_set(&self) -> bool { self.value().is_set() }
|
||||
fn has(&self, v: &dyn Value<D>) -> bool { self.value().has(v) }
|
||||
fn is_dictionary(&self) -> bool { self.value().is_dictionary() }
|
||||
fn get<'v>(&'v self, k: &'v dyn Value<D>) -> Option<&'v dyn Value<D>> { self.value().get(k) }
|
||||
fn get(&self, k: &(dyn Value<D> + 'static)) -> Option<&dyn Value<D>> { self.value().get(k) }
|
||||
fn entries(&self) -> Option<Box<dyn Iterator<Item = (&dyn Value<D>, &dyn Value<D>)> + '_>> { self.value().entries() }
|
||||
fn is_embedded(&self) -> bool { self.value().is_embedded() }
|
||||
fn embedded(&self) -> Option<Cow<'_, D>> { self.value().embedded() }
|
||||
|
@ -432,6 +432,10 @@ impl<D: Domain, V: Value<D>> Ord for Annotations<D, V> {
|
|||
mod demo {
|
||||
use crate::*;
|
||||
|
||||
fn getit<'a>(d: &'a dyn Value<NoValue>, k: &str) -> Option<&'a dyn Value<NoValue>> {
|
||||
d.get(&k as &(dyn Value<NoValue> + 'static))
|
||||
}
|
||||
|
||||
#[test] fn a() {
|
||||
let mut v: Map<Box<dyn Value<NoValue>>, String> = Map::new();
|
||||
v.insert(Box::new("abc"), "def".to_owned());
|
||||
|
@ -447,5 +451,14 @@ mod demo {
|
|||
for (kk, vv) in w.entries().unwrap() {
|
||||
println!("{:?} {:?} ==> {:?} {:?}", kk.value_class(), kk, vv.value_class(), vv);
|
||||
}
|
||||
|
||||
// {
|
||||
// use std::io::BufRead;
|
||||
// for line in std::io::stdin().lock().lines() {
|
||||
// let line = line.unwrap();
|
||||
// let val = w.get(&line);
|
||||
// println!("{:?} = {:?}", line, val);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue