CSData >>
 Cntr : Integer
 Sum : Integer : 2^64
;

/* * */

HashIndex ->
Arg Items : List : Integer <- I|F|S,
    Bits = 64

Cntr, Sum = 0 ..

Do CS 'Cntr Sum' Key,
   CS 'Cntr Sum' Value
With Key, Value from Items

If Sum > 2 ^ Bits then Sum = Sum %% ( 2 ^ Bits )

Sum

/

CS HashIndex ->
Arg D : ^&CSData, X : I|F|S

A : Array : Integer : 2^8 <- X

Do D.Cntr ++,
   D.Sum = Hash( D.Sum, A.i, D.Cntr )
Where i = 1 to A._

/

Hash CS = Shift( ? + BitMask( ?, ?, B_XOR ), TO_HIGHER, 1, B_CR )