x5      !"#$%&'()*+,-./01234 None 56789:;<=>?@ 59:;<=>?@ 58769:;<=>?@NoneA7What you have to mask an integer index by to tell if it's  cacheline-aligned BCDAEFGHIJKLMNOPQRSTBCDAEFKLMNOPQRSTBCDAEFGHIJKLMNOPQRSTNone UVWXYZ[\]^_`U^_`UVWXYZ[\]^_` NoneaCache line size, in bytes bcdaefghibefghibcdaefghi Nonej)Returns 0 if x is positive, -1 otherwise kAbs of an integer, branchless l Returns 0xfff..fff (aka -1) if a == b, 0 otherwise. mKSearch through a mutable vector for a given int value, cache-line aligned. D If the start index is cache-line aligned, and there is more than a  cache-line'Bs room between the start index and the end of the vector, we will A search the cache-line all at once using an efficient branchless A bit-twiddling technique. Otherwise, we will use a typical loop. nASearch through a mutable vector for one of two given int values, M cache-line aligned. If the start index is cache-line aligned, and there is  more than a cache-line'2s room between the start index and the end of the F vector, we will search the cache-line all at once using an efficient L branchless bit-twiddling technique. Otherwise, we will use a typical loop. oCSearch through a mutable vector for one of three given int values, M cache-line aligned. If the start index is cache-line aligned, and there is  more than a cache-line'2s room between the start index and the end of the F vector, we will search the cache-line all at once using an efficient L branchless bit-twiddling technique. Otherwise, we will use a typical loop. pqrstuvwxyz{|}~jklmvector to search  start index value to search for %dest index where it can be found, or  "-1" if not found nvector to search  start index value to search for value 2 to search for %dest index where it can be found, or  "-1" if not found ovector to search  start index value to search for value 2 to search for value 3 to search for %dest index where it can be found, or  "-1" if not found jklmno pqrstuvwxyz{|}~jklmno None Nonedefault value  new size number of elements to copy  old array None #A typeclass for hash tables in the  monad. The operations on these 7 hash tables are typically both key- and value-strict. )Creates a new, default-sized hash table. O(1). 'Creates a new hash table sized to hold n elements. O(n).  Inserts a key/8value mapping into a hash table, replacing any existing  mapping for that key. O(n) worst case, O(1) amortized. /Deletes a key-value mapping from a hash table. O(n) worst case,  O(1) amortized. .Looks up a key-value mapping in a hash table. O(n) worst case,  (O(1) for cuckoo hash), O(1) amortized. @A strict fold over the key-value records of a hash table in the   monad. O(n). :A side-effecting map over the key-value records of a hash  table. O(n). AComputes the overhead (in words) per key-value mapping. Used for F debugging, etc; time complexity depends on the underlying hash table  implementation. O(n). 4Create a hash table from a list of key-value pairs. O(n). FCreate a hash table from a list of key-value pairs, with a size hint. O(n). 7Given a hash table, produce a list of key-value pairs. O(n).     None &How many entries in the table? Prefer ( unboxed vector here to STRef because I & know it will be appropriately strict 'How many deleted entries in the table? 4An open addressing hash table using linear probing. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:delete. +See the documentation for this function in  Data.HashTable.Class#v:lookup. +See the documentation for this function in  Data.HashTable.Class#v:insert. +See the documentation for this function in  Data.HashTable.Class#v:foldM. +See the documentation for this function in  Data.HashTable.Class#v:mapM_. +See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. )     None in buckets, total size is  numWordsInCacheLine * _size A cuckoo hash table. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:insert. +See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. +See the documentation for this function in  Data.HashTable.Class#v:delete. +See the documentation for this function in  Data.HashTable.Class#v:lookup. +See the documentation for this function in  Data.HashTable.Class#v:foldM. +See the documentation for this function in  Data.HashTable.Class#v:mapM_. ) hash table are we updating? key cache line start address 1 cache line start address 2 hash1 hash2  hash table  hash code 1  hash code 2  cache line 1  cache line 2 key value !None A linear hash table. +See the documentation for this function in  Data.HashTable.Class#v:new. +See the documentation for this function in  Data.HashTable.Class#v:newSized. +See the documentation for this function in  Data.HashTable.Class#v:delete. !+See the documentation for this function in  Data.HashTable.Class#v:lookup. "+See the documentation for this function in  Data.HashTable.Class#v:insert. #+See the documentation for this function in  Data.HashTable.Class#v:mapM_. $+See the documentation for this function in  Data.HashTable.Class#v:foldM. %+See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead.  !"#$%  !"#$%  !"#$% !"#$%None&/A type alias for our hash tables, which run in ST, to set the state  token type to   (aka  RealWorld) so that we can use them in  . ',A type alias for the linear hash table. See Data.HashTable.ST.Linear. (,A type alias for the cuckoo hash table. See Data.HashTable.ST.Cuckoo. )AA type alias for a basic open addressing hash table using linear  probing. See Data.HashTable.ST.Basic. *+See the documentation for this function in Data.HashTable.Class#v:new. ++See the documentation for this function in  Data.HashTable.Class#v:newSized. ,+See the documentation for this function in Data.HashTable.Class#v:update. -+See the documentation for this function in Data.HashTable.Class#v:delete. .+See the documentation for this function in Data.HashTable.Class#v:lookup. /+See the documentation for this function in  Data.HashTable.Class#v:fromList. 0+See the documentation for this function in  +Data.HashTable.Class#v:fromListWithSizeHint. 1+See the documentation for this function in Data.HashTable.Class#v:toList. 2+See the documentation for this function in Data.HashTable.Class#v:foldM. 3+See the documentation for this function in Data.HashTable.Class#v:mapM_. 4+See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. &'()*+,-./01234&'()*+,-./01234)('&*+,-./01324&'()*+,-./01234     !"#$%&'()*+,-./0123456789:;<<=>?@ABCDEF * G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n J K Lopq r s t u v w s x y z { | } ~         vw vw xohashtables-1.1.2.1Data.HashTable.ClassData.HashTable.ST.BasicData.HashTable.ST.CuckooData.HashTable.ST.LinearData.HashTable.IO$Data.HashTable.Internal.UnsafeTricksData.HashTable.Internal.Utils2Data.HashTable.Internal.CheapPseudoRandomBitStream Data.HashTable.Internal.IntArray!Data.HashTable.Internal.CacheLineData.HashTable.Internal.Array%Data.HashTable.Internal.Linear.Bucket HashTablenewnewSizedinsertdeletelookupfoldMmapM_computeOverheadfromListfromListWithSizeHinttoList IOHashTableLinearHashTableCuckooHashTableBasicHashTableKeyDeletedElement EmptyElement emptyRecord deletedRecord keyIsEmpty keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElementcacheLineIntMaskwordSize cacheLineSizenumWordsInCacheLinecacheLineIntBits whichBucket binarySearchbinarySearchBybinarySearchByBounds primeSizes nextBestPrimebumpSizeshiftLshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameType BitStream _curRandom _bitsLeft _randomPos random32s random64s numRandomsrandoms newBitStream getNextBitgetNBitsIntArrayIAwordSizeInBytesnewArray readArray writeArraylengthtoPtrsign#bl_abs#mask#cacheLineSearchcacheLineSearch2cacheLineSearch3prefetchCacheLine64_writeprefetchCacheLine32_writeprefetchCacheLine64_readprefetchCacheLine32_readc_forwardSearch64_3c_forwardSearch64_2c_forwardSearch32_3c_forwardSearch32_2c_lineSearch64_3c_lineSearch32_3c_lineSearch64_2c_lineSearch32_2c_lineSearch64c_lineSearch32isTrue#fI prefetchRead prefetchWriteforwardSearch2forwardSearch3 lineSearch lineSearch2 lineSearch3advanceByCacheLineSizeisCacheLineAlignedmaskw#primitive-0.5.1.0Data.Primitive.Array MutableArrayBucket_Bucket _bucketSize _highwater_keys_valuesbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSize expandArrayexpandBucketArray growBucketTosnocsizemovedebugbaseGHC.STST_load_delLoadSlot_slot _wasDeleted HashTable__size_hashesHT newSizedReal insertRecord checkOverflow rehashAll growTabledelete'maxLoad emptyMarker deletedMarker recordIsEmptyrecordIsDeletedhashnewRefwriteRefreadRef $fMonoidSlot$fShowHashTable$fHashTableHashTable_rng _maxAttemptslookup' searchOne foldMWorkmapMWorkinsert' updateOrFail cuckooOrFailgrow hashPrimehash1hash2hashF whichLine_level _splitptr_bucketssplitprimitiveInsertprimitiveInsert' fillFactorpower2hashKey hashAtLvlControl.Monad.Primitive PrimStateghc-prim GHC.TypesIO