[m-rev.] for review: efficiency improvement for string__hash
Simon Taylor
stayl at cs.mu.OZ.AU
Thu Nov 21 17:58:53 AEDT 2002
Estimated hours taken: 1
Branches: main, release
library/string.m:
Avoid memory allocation in string__hash.
Index: library/string.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/string.m,v
retrieving revision 1.184
diff -u -u -r1.184 string.m
--- library/string.m 15 Nov 2002 04:50:37 -0000 1.184
+++ library/string.m 21 Nov 2002 02:33:18 -0000
@@ -1208,25 +1208,28 @@
string__hash(String, HashVal) :-
string__length(String, Length),
- string__to_int_list(String, CodeList),
- string__hash_2(CodeList, 0, HashVal0),
+ string__hash_2(String, 0, Length, 0, HashVal0),
HashVal = HashVal0 `xor` Length.
-:- pred string__hash_2(list(int), int, int).
-:- mode string__hash_2(in, in, out) is det.
+:- pred string__hash_2(string, int, int, int, int).
+:- mode string__hash_2(in, in, in, in, out) is det.
-string__hash_2([], HashVal, HashVal).
-string__hash_2([X | Xs], HashVal0, HashVal) :-
- string__combine_hash(HashVal0, X, HashVal1),
- string__hash_2(Xs, HashVal1, HashVal).
+string__hash_2(String, Index, Length, HashVal0, HashVal) :-
+ ( Index < Length ->
+ string__combine_hash(HashVal0,
+ char__to_int(string__unsafe_index(String, Index)),
+ HashVal1),
+ string__hash_2(String, Index + 1, Length, HashVal1, HashVal)
+ ;
+ HashVal = HashVal0
+ ).
:- pred string__combine_hash(int, int, int).
:- mode string__combine_hash(in, in, out) is det.
string__combine_hash(H0, X, H) :-
- H1 = H0 << 5,
- H2 = H1 `xor` H0,
- H = H2 `xor` X.
+ H1 = H0 `xor` (H0 << 5),
+ H = H1 `xor` X.
%-----------------------------------------------------------------------------%
--------------------------------------------------------------------------
mercury-reviews mailing list
post: mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the reviews
mailing list