Annotation of researchv10no/cmd/sml/src/util/strghash.sml, revision 1.1

1.1     ! root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
        !             2: (* util/strghash.sml *)
        !             3: 
        !             4: structure StrgHash =
        !             5: struct
        !             6: 
        !             7:   val prime = 8388593 (* largest prime less than 2^23 *)
        !             8:   val base = 128
        !             9: 
        !            10: (* the simple version --
        !            11:     fun hashString(str: string) : int =
        !            12:         let fun loop (0,n) = n
        !            13:              | loop (i,n) = 
        !            14:                  let val i = i-1
        !            15:                      val n' = (base * n + ordof(str,i)) 
        !            16:                   in loop (i, (n' - prime * (n' div prime)))
        !            17:                  end
        !            18:         in loop (size str,0)
        !            19:        end
        !            20: *)
        !            21: 
        !            22:   fun hashString(str: string) : int =
        !            23:       let val l = size str
        !            24:        in case l
        !            25:            of 0 => 0
        !            26:             | 1 => ord str
        !            27:             | 2 => ordof(str,0) + base * ordof(str,1)
        !            28:             | 3 => ordof(str,0) + base * (ordof(str,1) + base * ordof(str,2))
        !            29:             | _ =>
        !            30:                let fun loop (0,n) = n
        !            31:                      | loop (i,n) = 
        !            32:                          let val i = i-1
        !            33:                              val n' = (base * n + ordof(str,i)) 
        !            34:                           in loop (i, (n' - prime * (n' div prime)))
        !            35:                          end
        !            36:                 in loop (l,0)
        !            37:                end
        !            38:       end
        !            39: 
        !            40: end (* structure StrgHash *)
        !            41: 
        !            42: 
        !            43: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.