~r>3      !"#$%&'()*+,-./012  3456789:;<=> 3789:;<=> 3789:;<=>?@AB7What you have to mask an integer index by to tell if it's  cacheline-aligned CDEFGHIJKLMNOPQ?@ABCDIJKLMNOPQ?@ABCDIJKLMNOPQ RSTUVWXYZ[\]R[\]R[\] ^_`aCache line size, in bytes bcdef^bcdef^bcdef ghijklmnopqrstuvwxyz{|}~)Returns 0 if x is positive, -1 otherwise Abs of an integer, branchless  Returns 0xfff..fff (aka -1) if a == b, 0 otherwise. KSearch 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. vector to search  start index value to search for %dest index where it can be found, or  "-1" if not found ASearch 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. vector 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 CSearch 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. vector 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 vwxy}~ vwxy}~  default value  new size number of elements to copy  old array  #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).    &&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.   '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 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.  !"#$  !"#$  !"#$%/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('&%)*+,-./102%&'()*+,-./012     !"#$%&'()*+,-./0123456789::;<=>?@ABCD E 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 H I Jlmn o p q r s t p u v w x y z { | } ~         st st ulhashtables-1.0.1.2Data.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 keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElementwordSize cacheLineSizenumWordsInCacheLinecacheLineIntMaskcacheLineIntBits whichBucket binarySearchbinarySearchBybinarySearchByBounds primeSizes nextBestPrimebumpSizeshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameType BitStream _curRandom _bitsLeft _randomPos random32s random64s numRandomsrandoms newBitStream getNextBitgetNBitsIntArrayIAwordSizeInBytesnewArray readArray writeArraylengthtoPtrprefetchCacheLine64_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 lineSearch3advanceByCacheLineSizeisCacheLineAlignedsign#bl_abs#mask#maskw#cacheLineSearchcacheLineSearch2cacheLineSearch3primitive-0.4.0.1Data.Primitive.Array MutableArrayBucket_Bucket _bucketSize _highwater_keys_valuesbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSize expandArrayexpandBucketArray growBucketTosnocsizemovedebugbaseGHC.STSTSlot_slot _wasDeleted HashTable__size_load_delLoad_hashesHT newSizedReal insertRecord checkOverflow rehashAll growTabledelete'maxLoad emptyMarker deletedMarker recordIsEmptyrecordIsDeletedhashnewRefwriteRefreadRef_rng _maxAttemptslookup' searchOne foldMWorkmapMWorkinsert' updateOrFail cuckooOrFailgrow hashPrimehash1hash2hashF whichLine_level _splitptr_bucketssplitprimitiveInsertprimitiveInsert' fillFactorpower2hashKey hashAtLvlControl.Monad.Primitive PrimStateghc-prim GHC.TypesIOGHC.Prim RealWorld