;;;;;; Riatables: alternative hash tables                -*- Scheme -*-
;;;;;; Interface and package definitions

;;; Taylor Campbell wrote this code; he places it in the public domain.

(define-interface riatables-interface
  (export table-template?
          make-table-template
          make-weak-table-template
          make-strong-table-template

               weaken-table-template          strengthen-table-template
          head-weaken-table-template     head-strengthen-table-template
          tail-weaken-table-template     tail-strengthen-table-template
          modify-table-template-weakness

          table-template-key-predicate
          table-template-key-comparator
          table-template-key-hasher
          table-template-gc-sensitive?
          table-template-head-weak?
          table-template-tail-weak?

          table-constructor

          table?
          make-table-from-template

          table-size
          table-entry
          set-table-entry!
          modify-table-entry!
          pop-table-entry!
          walk-table
          table->alist

          table-template

          descriptor-hash       modular-descriptor-hash
          string-hash           modular-string-hash
          string-ci-hash        modular-string-ci-hash
          integer-hash          modular-integer-hash

          make-object-table             object-table-template
          make-weak-object-table   weak-object-table-template
          make-string-table             string-table-template
          make-string-ci-table       string-ci-table-template
          make-integer-table           integer-table-template
          make-symbol-table             symbol-table-template))

(define-interface riatables-support-interface
  (export gc-stamp
          descriptor-hash	modular-descriptor-hash
          string-hash		modular-string-hash
          string-ci-hash	modular-string-ci-hash
          integer-hash		modular-integer-hash
          exact-integer?))

(define-structure riatables riatables-interface
  (open scheme
        receiving
        weak
        (subset signals			(error call-error))
        define-record-types
        riatables-support)
  (optimize auto-integrate)
  (files riatable))

(define-structure riatables-support riatables-support-interface
  (open scheme
        (subset primitives		(memory-status string-hash))
        (subset architecture		(memory-status-option))
        enumerated)
  (optimize auto-integrate)
  (files support))