From 668d37fef7cbdd4a1a7e86ad514716041b5dd16e Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 3 Mar 2013 17:33:35 -0800 Subject: [PATCH] layouts: speed up ``M\ iota hashcode*`` using most-positive-fixnum. --- core/combinators/combinators.factor | 2 -- core/layouts/layouts.factor | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/combinators/combinators.factor b/core/combinators/combinators.factor index de6616d76f..1a76bcc70e 100644 --- a/core/combinators/combinators.factor +++ b/core/combinators/combinators.factor @@ -201,8 +201,6 @@ M: reversed hashcode* [ sequence-hashcode ] recursive-hashcode ; M: slice hashcode* [ sequence-hashcode ] recursive-hashcode ; -M: iota hashcode* over 0 <= [ 2drop 0 ] [ sequence-hashcode ] if ; - M: hashtable hashcode* [ dup assoc-size 1 eq? diff --git a/core/layouts/layouts.factor b/core/layouts/layouts.factor index 643e5c221a..a7bfbb7c2d 100644 --- a/core/layouts/layouts.factor +++ b/core/layouts/layouts.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: namespaces math words kernel assocs classes -math.order kernel.private ; +math.order kernel.private sequences sequences.private ; IN: layouts SYMBOL: data-alignment @@ -91,4 +91,17 @@ M: real >integer dup most-negative-fixnum most-positive-fixnum between? [ >fixnum ] [ >bignum ] if ; inline +! we put this here so that it can use the references to +! most-positive-fixnum otherwise would be in combinatrs +M: iota hashcode* + over 0 <= [ 2drop 0 ] [ + nip length [ + 0 most-positive-fixnum clamp integer>fixnum + 0 swap [ sequence-hashcode-step ] each-integer + ] [ + most-positive-fixnum swap + [ sequence-hashcode-step ] (each-integer) + ] bi + ] if ; + UNION: immediate fixnum POSTPONE: f ;