From 1f13eefad220e8588bf885cc62fd80704892b094 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 26 Mar 2013 17:24:38 -0700 Subject: [PATCH] hash-sets: slightly faster filter-members. --- core/hash-sets/hash-sets.factor | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/hash-sets/hash-sets.factor b/core/hash-sets/hash-sets.factor index 2d79b9068d..67d9ada307 100644 --- a/core/hash-sets/hash-sets.factor +++ b/core/hash-sets/hash-sets.factor @@ -147,12 +147,18 @@ INSTANCE: hash-set set : array/tester ( hash-set1 hash-set2 -- array quot ) [ array>> ] dip [ in? ] curry ; inline +: filter-members ( hash-set array quot: ( elt -- ? ) -- accum ) + [ dup ] prepose rot cardinality [ + [ push-unsafe ] curry [ [ drop ] if ] curry + compose each + ] keep ; inline + PRIVATE> M: hash-set intersect over hash-set? [ - small/large array/tester not-tombstones - filter >hash-set + small/large dupd array/tester not-tombstones + filter-members >hash-set ] [ (intersect) >hash-set ] if ; M: hash-set intersects? @@ -168,8 +174,8 @@ M: hash-set union M: hash-set diff over hash-set? [ - array/tester [ not ] compose not-tombstones - filter >hash-set + dupd array/tester [ not ] compose not-tombstones + filter-members >hash-set ] [ (diff) >hash-set ] if ; M: hash-set subset?