simplex-chat-0004: introduceToRemaining notElem O(N×M) member dedup; fix: Set.notMember O(log N)

This commit is contained in:
russell@unturf.com 2026-03-29 22:03:20 -04:00
parent eb534f0944
commit d9ca5b236f
12 changed files with 1006 additions and 0 deletions

View file

@ -0,0 +1,25 @@
# UNDF: (pending)
--- a/src/Simplex/Chat/Library/Internal.hs
+++ b/src/Simplex/Chat/Library/Internal.hs
@@ -30,6 +30,7 @@ import Control.Monad.Except
import Data.Bifunctor (bimap, first)
import Data.Fixed (Fixed (..))
import Data.List (find, foldl', mapAccumL, partition)
+import qualified Data.Set as S
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M
...
@@ -1064,9 +1064,11 @@ introduceToRemaining vr user gInfo m = do
(members, introducedGMIds) <-
withStore' $ \db -> (,) <$> getGroupMembers db vr user gInfo <*> getIntroducedGroupMemberIds db m
- let recipients = filter (introduceMemP introducedGMIds) members
+ let introducedSet = S.fromList introducedGMIds
+ recipients = filter (introduceMemP introducedSet) members
introduceMember vr user gInfo m recipients Nothing
where
- introduceMemP introducedGMIds mem =
+ introduceMemP introducedSet mem =
memberCurrent mem
- && groupMemberId' mem `notElem` introducedGMIds
+ && groupMemberId' mem `S.notMember` introducedSet
&& groupMemberId' mem /= groupMemberId' m