From b3d0e4f03ca05bf4149ac9e0e1695d5fa958ea61 Mon Sep 17 00:00:00 2001 From: Michael Sippel Date: Fri, 23 Aug 2024 13:57:10 +0200 Subject: [PATCH] add more types to detach --- lib-nested-core/src/repr_tree/node.rs | 69 ++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 11 deletions(-) diff --git a/lib-nested-core/src/repr_tree/node.rs b/lib-nested-core/src/repr_tree/node.rs index efb52fb..bc51906 100644 --- a/lib-nested-core/src/repr_tree/node.rs +++ b/lib-nested-core/src/repr_tree/node.rs @@ -19,7 +19,7 @@ use { sync::{Arc, RwLock}, any::Any }, - super::{Context, ReprLeaf, ReprTreeExt, context::{TYPEID_vec, TYPEID_char, TYPEID_u64, TYPEID_edittree}} + super::{Context, ReprLeaf, ReprTreeExt, context::{TYPEID_list, TYPEID_vec, TYPEID_char, TYPEID_u64, TYPEID_edittree}} }; //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> @@ -192,7 +192,7 @@ impl ReprTree { V::Msg: Clone { while let Some(rung_type) = type_ladder.next() { - if &rung_type != self.get_type() { + if &rung_type != self.get_type() { if let Some(next_repr) = self.branches.get(&rung_type) { next_repr.write().unwrap().attach_leaf_to(type_ladder, src_port); } else { @@ -241,23 +241,70 @@ impl ReprTree { leaf.attach_to(src_port); self.leaf = Some(leaf); - } else { + } else { self.leaf = Some(ReprLeaf::from_view(src_port)); } - } + } } pub fn detach(&mut self, ctx: &Arc>) { -// eprintln!("DETACH {:?}", self.get_type()); if let Some(leaf) = self.leaf.as_mut() { - if self.type_tag == Context::parse(&ctx, "Char") { - leaf.detach::>(); + if self.type_tag == + TypeTerm::TypeID(TYPEID_edittree) + { + leaf.detach::< dyn SingletonView< + Item = Arc> + > >(); } - if self.type_tag == Context::parse(&ctx, "") { - leaf.detach_vec::(); + else if self.type_tag == + TypeTerm::TypeID(TYPEID_char) + { + leaf.detach::< dyn SingletonView >(); } - if self.type_tag == Context::parse(&ctx, "") { - leaf.detach::>(); + else if self.type_tag == TypeTerm::TypeID(TYPEID_u64) + { + leaf.detach::< dyn SingletonView >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_vec), + TypeTerm::TypeID(TYPEID_edittree), + ]) { + leaf.detach_vec::< + Arc> + >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_vec), + TypeTerm::TypeID(TYPEID_char), + ]) { + leaf.detach_vec::< char >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_vec), + TypeTerm::TypeID(TYPEID_u64), + ]) { + leaf.detach_vec::< u64 >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_list), + TypeTerm::TypeID(TYPEID_edittree), + ]) { + leaf.detach::< dyn ListView>> >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_list), + TypeTerm::TypeID(TYPEID_char), + ]) { + leaf.detach::< dyn ListView >(); + } + else if self.type_tag == TypeTerm::App(vec![ + TypeTerm::TypeID(TYPEID_list), + TypeTerm::TypeID(TYPEID_u64), + ]) { + leaf.detach::< dyn ListView >(); + } + else { + eprintln!("cant detach type {}", ctx.read().unwrap().type_term_to_str(&self.type_tag)); } }