pub mod map_item; use { std::{ sync::{Arc, RwLock}, ops::{Deref, Range} }, crate::core::View }; //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> pub trait IndexView : View { type Item; fn get(&self, key: &Key) -> Self::Item; fn range(&self) -> Option> { None } } //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> impl> IndexView for RwLock { type Item = V::Item; fn get(&self, key: &Key) -> Self::Item { self.read().unwrap().get(key) } fn range(&self) -> Option> { self.read().unwrap().range() } } impl> IndexView for Arc { type Item = V::Item; fn get(&self, key: &Key) -> Self::Item { self.deref().get(key) } fn range(&self) -> Option> { self.deref().range() } } //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> pub trait ImplIndexView : Send + Sync { type Key; type Value; fn get(&self, key: &Self::Key) -> Self::Value; fn range(&self) -> Option> { None } } impl View for V { type Msg = V::Key; } impl IndexView for V { type Item = V::Value; fn get(&self, key: &V::Key) -> Self::Item { (self as &V).get(key) } fn range(&self) -> Option> { (self as &V).range() } }