sunterlib/s48/riatables/scheme/support.scm

40 lines
1.2 KiB
Scheme

;;;;;; Riatables: alternative hash tables -*- Scheme -*-
;;;;;; Miscellaneous support utilities
;;; Taylor Campbell wrote this code; he places it in the public domain.
(define (gc-stamp)
(memory-status (enum memory-status-option gc-count) 0))
(define (descriptor-hash object)
(memory-status (enum memory-status-option pointer-hash) object))
(define (modular-descriptor-hash object mod)
(modulo (descriptor-hash object) mod))
;;; Silly string hashers. I use Scheme48's STRING-HASH, not a better
;;; algorithm (Scheme48's is pretty terrible), because it's a primitive
;;; in the VM and therefore faster than anything in plain Scheme.
(define (modular-string-hash string mod)
(modulo (string-hash string) mod))
(define (string-ci-hash string)
(let* ((length (string-length string))
(new-string (make-string length)))
(do ((i 0 (+ i 1)))
((= i length))
(string-set! new-string i (char-downcase (string-ref string i))))
(string-hash string)))
(define (modular-string-ci-hash string mod)
(modulo (string-ci-hash string) mod))
(define (integer-hash integer) (abs integer))
(define (modular-integer-hash integer mod)
(modulo integer mod))
(define (exact-integer? x)
(and (integer? x) (exact? x)))