Fiddle with fn get (unsuccessfully)

This commit is contained in:
Tony Garnock-Jones 2022-11-02 13:34:39 +01:00
parent a33f96bc1d
commit 9aea564b2c
1 changed files with 18 additions and 5 deletions

View File

@ -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);
// }
// }
}
}