From 6e337f49ee9d592e3b2d1a4a91d2cbd6f0ccd28e Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 12 Sep 2024 22:28:04 +0800 Subject: [PATCH 1/5] wip --- src/Data/Observers/link.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Data/Observers/link.cpp b/src/Data/Observers/link.cpp index a3b92b0849..34d85df2dd 100644 --- a/src/Data/Observers/link.cpp +++ b/src/Data/Observers/link.cpp @@ -10,6 +10,7 @@ ******************************************************************************/ #include "link.hpp" +#include "hashset.hpp" #include "iterator.hpp" #include "modification.hpp" #include "observers.hpp" @@ -20,10 +21,15 @@ using namespace moebius; -hashmap> id_resolve; -hashmap> pointer_resolve; -hashmap> vertex_occurrences; -hashmap type_count (0); +static int +hash (soft_link l) { + return hash (l->t); +} + +hashmap> id_resolve; +hashmap> pointer_resolve; +hashmap> vertex_occurrences; +hashmap type_count (0); static hashset visited_table; @@ -57,15 +63,15 @@ unregister_pointer (string id, observer which) { void register_vertex (tree v, soft_link ln) { - list& l= vertex_occurrences (v); - l = list (ln, l); + hashset& l= vertex_occurrences (v); + l->insert (ln); } void unregister_vertex (tree v, soft_link ln) { - list& l= vertex_occurrences (v); - l = remove (l, ln); - if (is_nil (l)) vertex_occurrences->reset (v); + hashset& l= vertex_occurrences (v); + l->remove (ln); + if (N (l) == 0) vertex_occurrences->reset (v); } void @@ -162,9 +168,13 @@ get_trees (string id) { } list -as_tree_list (list l) { - if (is_nil (l)) return list (); - else return list (l->item->t, as_tree_list (l->next)); +as_tree_list (hashset l) { + iterator it= iterate (l); + list r; + while (it->busy ()) { + r= list (it->next ()->t, r); + } + return r; } list From ad3afa9c8425f15a71fb7ccacd72c31387f44ca2 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 12 Sep 2024 22:30:18 +0800 Subject: [PATCH 2/5] wip --- src/Data/Observers/link.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Data/Observers/link.cpp b/src/Data/Observers/link.cpp index 34d85df2dd..948132bcc0 100644 --- a/src/Data/Observers/link.cpp +++ b/src/Data/Observers/link.cpp @@ -70,6 +70,7 @@ register_vertex (tree v, soft_link ln) { void unregister_vertex (tree v, soft_link ln) { hashset& l= vertex_occurrences (v); + cout << "unvertex: " << N(l) << LF; l->remove (ln); if (N (l) == 0) vertex_occurrences->reset (v); } From 2c70dfd8bf78daa220521348376f25c064cb11e0 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 12 Sep 2024 22:30:38 +0800 Subject: [PATCH 3/5] wip --- src/Data/Observers/link.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Data/Observers/link.cpp b/src/Data/Observers/link.cpp index 948132bcc0..d27db489a6 100644 --- a/src/Data/Observers/link.cpp +++ b/src/Data/Observers/link.cpp @@ -70,7 +70,7 @@ register_vertex (tree v, soft_link ln) { void unregister_vertex (tree v, soft_link ln) { hashset& l= vertex_occurrences (v); - cout << "unvertex: " << N(l) << LF; + cout << "unvertex: " << N (l) << LF; l->remove (ln); if (N (l) == 0) vertex_occurrences->reset (v); } From 7436d999f1eb31bd2a4886c94300d172cef2f408 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 12 Sep 2024 22:52:03 +0800 Subject: [PATCH 4/5] wip --- src/Data/Observers/link.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Data/Observers/link.cpp b/src/Data/Observers/link.cpp index d27db489a6..dfb00b9d13 100644 --- a/src/Data/Observers/link.cpp +++ b/src/Data/Observers/link.cpp @@ -63,14 +63,19 @@ unregister_pointer (string id, observer which) { void register_vertex (tree v, soft_link ln) { - hashset& l= vertex_occurrences (v); - l->insert (ln); + if (vertex_occurrences->contains(v)) { + hashset& l= vertex_occurrences (v); + l->insert (ln); + } else { + hashset l= hashset (); + l->insert(ln); + vertex_occurrences (v)= l; + } } void unregister_vertex (tree v, soft_link ln) { hashset& l= vertex_occurrences (v); - cout << "unvertex: " << N (l) << LF; l->remove (ln); if (N (l) == 0) vertex_occurrences->reset (v); } From d4df71017fd6c2358cbc2283a482a80957b0a8b0 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Thu, 12 Sep 2024 22:52:15 +0800 Subject: [PATCH 5/5] wip --- src/Data/Observers/link.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Data/Observers/link.cpp b/src/Data/Observers/link.cpp index dfb00b9d13..07aec28874 100644 --- a/src/Data/Observers/link.cpp +++ b/src/Data/Observers/link.cpp @@ -63,12 +63,13 @@ unregister_pointer (string id, observer which) { void register_vertex (tree v, soft_link ln) { - if (vertex_occurrences->contains(v)) { + if (vertex_occurrences->contains (v)) { hashset& l= vertex_occurrences (v); l->insert (ln); - } else { + } + else { hashset l= hashset (); - l->insert(ln); + l->insert (ln); vertex_occurrences (v)= l; } }