Hi Maarten,

MK> I tested it some more, and it works like a charm! Thanks for the
MK> time-saver. Especially the fact that it works modulo (max value of the 
MK> supplied binary) is really nice.

Great! I wasn't sure if I had overlooked something, or if it was what
you wanted. I won't spend time on it now, but eliminating FOR is an
obvious speed trap (~30%):

add-bitsets: func [a b /local c i n carry] [
    carry: 0
    c: make bitset! length? a
    repeat i (length? a) - 1 [
        n: i - 1
        switch carry + add get-bit a n get-bit b n [
            0 []
            1 [set-bit c n  carry: 0]
            2 [carry: 1]
            3 [set-bit c n  carry: 1]
        ]
    ]
    if carry <> 0 [
        i: 0
        while [bit-set? c i][
            clear-bit c i
            i: i + 1
        ]
        set-bit c i
    ]
    c
]

MK> BTW: I never really "got" bitsets (shame) so if anybody wants to
MK> elaborate on how the various operation on bitsets work... The docs don't 
MK> mention the bitset! value at all, except for parse (where I used it).

I just derived my stuff via experimentation. Occasionally I look at
old libraries I've done and port pieces of them. I had an old
bit-vector class I pseudo-ported (haven't done bit-matrix yet :) and
just played around to see how they worked. Things like UNION,
DIFFERENCE, and INTERSECT also work on them, which is nice. Now, if
only we had native SHIFT and ROTATE functions...

-- Gregg

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to