# $Id: hash.parrot,v 1.0 2002/08/20 11:14:00 dada Exp $
# http://dada.perl.it/shootout/
set I1, P0[1]
new P1, .PerlHash
# new P2, .PerlInt
set I0, 1
BUILD:
bsr DEC2HEX
# set P2, I0
# set P1[S0], P2
set P1[S0], I0
inc I0
le I0, I1, BUILD
set I0, 0
COUNT:
set S0, I1
# print "GET hash("
# print S0
# print ")="
# set P2, P1[S0]
# typeof I2, P2
# typeof S2, P2
# print S2
set I2, P1[S0]
unless I2, NEXT
# eq I2, .PerlUndef, NEXT
# print " ++"
inc I0
NEXT:
# print "\n"
dec I1
if I1, COUNT
print I0
print "\n"
end
DEC2HEX:
set S0, ""
set I10, I0
DEC2HEX_START:
mod I11, I10, 16
lt I11, 10, DEC2HEX_N
eq I11, 15, DEC2HEX_F
eq I11, 14, DEC2HEX_E
eq I11, 13, DEC2HEX_D
eq I11, 12, DEC2HEX_C
eq I11, 11, DEC2HEX_B
eq I11, 10, DEC2HEX_A
DEC2HEX_N:
set S1, I11
concat S0, S1, S0
branch DEC2HEX_NEXT
DEC2HEX_A:
concat S0, "a", S0
branch DEC2HEX_NEXT
DEC2HEX_B:
concat S0, "b", S0
branch DEC2HEX_NEXT
DEC2HEX_C:
concat S0, "c", S0
branch DEC2HEX_NEXT
DEC2HEX_D:
concat S0, "d", S0
branch DEC2HEX_NEXT
DEC2HEX_E:
concat S0, "e", S0
branch DEC2HEX_NEXT
DEC2HEX_F:
concat S0, "f", S0
DEC2HEX_NEXT:
div I10, I10, 16
if I10, DEC2HEX_START
ret