u3      !"#$%&'()*+,-./012 None 3456789:;<=> 3789:;<=> 3654789:;<=>None?7What you have to mask an integer index by to tell if it's  cacheline-aligned @AB?CDEFGHIJKLMNOPQR@AB?CDIJKLMNOPQR@AB?CDEFGHIJKLMNOPQRNone STUVWXYZ[\]^S\]^STUVWXYZ[\]^ None_Cache line size, in bytes `ab_cdefg`cdefg`ab_cdefg Noneh)Returns 0 if x is positive, -1 otherwise iAbs of an integer, branchless j Returns 0xfff..fff (aka -1) if a == b, 0 otherwise. kKSearch 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. lASearch 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. mCSearch 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. nopqrstuvwxyz{|}~hijkvector to search  start index value to search for %dest index where it can be found, or  "-1" if not found lvector 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 mvector 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 }~hijklmnopqrstuvwxyz{|}~hijklm 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). 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 , to set the state  token type to   (aka ) 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. /+See the documentation for this function in Data.HashTable.Class#v:toList. 0+See the documentation for this function in Data.HashTable.Class#v:foldM. 1+See the documentation for this function in Data.HashTable.Class#v:mapM_. 2+See the documentation for this function in  &Data.HashTable.Class#v:computeOverhead. %&'()*+,-./012%&'()*+,-./012('&%)*+,-./102%&'()*+,-./012     !"#$%&'()*+,-./0123456789:;;<=>?@ABCDE ) F 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 I J Kmno p q r s t u q v w x y z { | } ~         tu tu vmhashtables-1.0.1.8Data.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_computeOverheadfromListtoList 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_lineSearch32fI 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.TypesIOGHC.Prim RealWorld