From beef4d9c2949960d232078c5203a2bde0fcc3c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Rze=C5=BAnicki?= Date: Fri, 8 May 2026 23:09:03 +0200 Subject: [PATCH] zipper_algebra: support more zippers --- src/experimental/zipper_algebra.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/experimental/zipper_algebra.rs b/src/experimental/zipper_algebra.rs index 8d699df..37026ca 100644 --- a/src/experimental/zipper_algebra.rs +++ b/src/experimental/zipper_algebra.rs @@ -98,6 +98,16 @@ impl ZipperAlgebraExt { } +impl ZipperAlgebraExt + for ReadZipperOwned +{ +} + +impl ZipperAlgebraExt for PrefixZipper<'_, Z> where + Z: ZipperInfallibleSubtries + ZipperSubtries + ZipperConcrete + ZipperMoving +{ +} + /// Performs an ordered join (least upper bound) of two radix-256 tries using zipper traversal. /// /// This function merges two tries by simultaneously traversing them in lexicographic order, @@ -1760,6 +1770,8 @@ mod zipper_algebra_poly { pub(super) enum SomeMutRefZ<'a, 'trie, 'path, V: Clone + Send + Sync + Unpin, A: Allocator> { RZ(&'a mut ReadZipperUntracked<'trie, 'path, V, A>), RZT(&'a mut ReadZipperTracked<'trie, 'path, V, A>), + PZRZ(&'a mut PrefixZipper<'a, ReadZipperUntracked<'trie, 'path, V, A>>), + PZRZT(&'a mut PrefixZipper<'a, ReadZipperTracked<'trie, 'path, V, A>>), } impl ZipperInfallibleSubtries @@ -1769,6 +1781,8 @@ mod zipper_algebra_poly { match self { SomeMutRefZ::RZ(inner) => inner.make_map(), SomeMutRefZ::RZT(inner) => inner.make_map(), + SomeMutRefZ::PZRZ(inner) => inner.make_map(), + SomeMutRefZ::PZRZT(inner) => inner.make_map(), } } @@ -1776,6 +1790,8 @@ mod zipper_algebra_poly { match self { SomeMutRefZ::RZ(inner) => inner.get_trie_ref(), SomeMutRefZ::RZT(inner) => inner.get_trie_ref(), + SomeMutRefZ::PZRZ(inner) => inner.get_trie_ref(), + SomeMutRefZ::PZRZT(inner) => inner.get_trie_ref(), } } @@ -1783,6 +1799,8 @@ mod zipper_algebra_poly { match self { SomeMutRefZ::RZ(inner) => inner.get_focus(), SomeMutRefZ::RZT(inner) => inner.get_focus(), + SomeMutRefZ::PZRZ(inner) => inner.get_focus(), + SomeMutRefZ::PZRZT(inner) => inner.get_focus(), } } @@ -1790,6 +1808,8 @@ mod zipper_algebra_poly { match self { SomeMutRefZ::RZ(inner) => inner.try_borrow_focus(), SomeMutRefZ::RZT(inner) => inner.try_borrow_focus(), + SomeMutRefZ::PZRZ(inner) => inner.try_borrow_focus(), + SomeMutRefZ::PZRZT(inner) => inner.try_borrow_focus(), } } }