-*- Mode : Lisp ; Package : CCL -*-
;;;
  Copyright 1994 - 2009 Clozure Associates
;;;
  Licensed under the Apache License , Version 2.0 ( the " License " ) ;
;;; you may not use this file except in compliance with the License.
;;; You may obtain a copy of the License at
;;;
;;;     -2.0
;;;
;;; Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an " AS IS " BASIS ,
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;;; See the License for the specific language governing permissions and
;;; limitations under the License.

(in-package "CCL")

(eval-when (:compile-toplevel :execute)

  It 's wired in to the code that the length of this vector is 8 and
  that its largest element is < 30
(defconstant secondary-keys #(3 5 7 11 13 17 19 23))
(defconstant secondary-keys-*-2 #(6 10 14 22 26 34 38 46))


(defconstant $nhash.lock-free #x80000)

; The hash.vector cell contains a vector with some longwords of overhead
; followed by alternating keys and values.
;; If you change anything here, also update the kernel def in XXX-constantsNN.h
(def-accessors () %svref
  GC link for weak vectors
  nhash.vector.flags                    ; a fixnum of flags
  nhash.vector.gc-count                 ; gc-count kernel global
  nhash.vector.free-alist               ; empty alist entries for finalization
  nhash.vector.finalization-alist       ; deleted out key/value pairs put here
  incremented when the GC deletes an element
  nhash.vector.hash                     ; back-pointer
  if lock - free , hint to GC to delete marked keys .
                                        ; else number of deleted entries
  nhash.vector.count                    ; number of valid entries
  nhash.vector.cache-idx                ; index of last cached key/value pair [not used if lock-free]
  nhash.vector.cache-key                ; cached key [not used if lock-free]
  nhash.vector.cache-value              ; cached value [not used if lock-free]
  nhash.vector.size                     ; number of entries in table
  shifted reciprocal of nhash.vector.size
  )


  number of longwords of overhead in nhash.vector .
  Must be a multiple of 2 or INDEX parameters in LAP code will not be tagged as fixnums .
(defconstant $nhash.vector_overhead 14)

(defconstant $nhash_weak_bit 12)        ; weak hash table
(defconstant $nhash_weak_value_bit 11)  ; weak on value vice key if this bit set
(defconstant $nhash_finalizeable_bit 10)
  GC must not change key slots when deleting
(defconstant $nhash_weak_flags_mask
  (bitset $nhash_keys_frozen_bit (bitset $nhash_weak_bit (bitset $nhash_weak_value_bit (bitset $nhash_finalizeable_bit 0)))))


  request GC to track relocation of keys .
  set by GC if a key moved .
(defconstant $nhash_ephemeral_bit 26)   ; set if a hash code was computed using an address
                                        ; in ephemeral space
(defconstant $nhash_component_address_bit 25) ; a hash code was computed from a key's component



(defconstant $nhash-growing-bit 16)
(defconstant $nhash-rehashing-bit 17)

)

(declare-arch-specific-macro immediate-p-macro)

(declare-arch-specific-macro hashed-by-identity)
          
	 
;; state is #(hash-table index key-vector count)  
(def-accessors %svref
  nhti.hash-table
  nhti.index
  nhti.keys
  nhti.values
  nhti.nkeys)










 Package : CCL -*-



 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     -2.0

 Unless required by applicable law or agreed to in writing, software
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 The hash.vector cell contains a vector with some longwords of overhead
 followed by alternating keys and values.
 If you change anything here, also update the kernel def in XXX-constantsNN.h
 a fixnum of flags
 gc-count kernel global
 empty alist entries for finalization
 deleted out key/value pairs put here
 back-pointer
 else number of deleted entries
 number of valid entries
 index of last cached key/value pair [not used if lock-free]
 cached key [not used if lock-free]
 cached value [not used if lock-free]
 number of entries in table
 weak hash table
 weak on value vice key if this bit set
 set if a hash code was computed using an address
 in ephemeral space
 a hash code was computed from a key's component
 state is #(hash-table index key-vector count)  
  Copyright 1994 - 2009 Clozure Associates
  distributed under the License is distributed on an " AS IS " BASIS ,

(in-package "CCL")

(eval-when (:compile-toplevel :execute)

  It 's wired in to the code that the length of this vector is 8 and
  that its largest element is < 30
(defconstant secondary-keys #(3 5 7 11 13 17 19 23))
(defconstant secondary-keys-*-2 #(6 10 14 22 26 34 38 46))


(defconstant $nhash.lock-free #x80000)

(def-accessors () %svref
  GC link for weak vectors
  incremented when the GC deletes an element
  if lock - free , hint to GC to delete marked keys .
  shifted reciprocal of nhash.vector.size
  )


  number of longwords of overhead in nhash.vector .
  Must be a multiple of 2 or INDEX parameters in LAP code will not be tagged as fixnums .
(defconstant $nhash.vector_overhead 14)

(defconstant $nhash_finalizeable_bit 10)
  GC must not change key slots when deleting
(defconstant $nhash_weak_flags_mask
  (bitset $nhash_keys_frozen_bit (bitset $nhash_weak_bit (bitset $nhash_weak_value_bit (bitset $nhash_finalizeable_bit 0)))))


  request GC to track relocation of keys .
  set by GC if a key moved .



(defconstant $nhash-growing-bit 16)
(defconstant $nhash-rehashing-bit 17)

)

(declare-arch-specific-macro immediate-p-macro)

(declare-arch-specific-macro hashed-by-identity)
          
	 
(def-accessors %svref
  nhti.hash-table
  nhti.index
  nhti.keys
  nhti.values
  nhti.nkeys)









