iI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH NoneB IJKLMNOPQRST LMNOPQRST IJKLMNOPQRSTNoneBUCache line size, in bytesVWXYZ[\]U^_`ab VWYZ[\^_`ab VWXYZ[\]U^_`abNoneBcLWhat you have to mask an integer index by to tell if it's cacheline-aligneddefcghijklmnopqrstuvwdefcghmnopqrstuvdefcghijklmnopqrstuv None xyz{|}~xxyz{|}~ None B(Returns 0 if x is positive, -1 otherwiseAbs of an integer, branchless Returns 0xfff..fff (aka -1) if a == b, 0 otherwise.3Returns 0xfff..fff (aka -1) if a == b, 0 otherwise.^Search through a mutable vector for a given int value, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.iSearch through a mutable vector for one of two given int values, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.kSearch through a mutable vector for one of three given int values, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.vector to search start indexvalue to search for7dest index where it can be found, or "-1" if not foundvector to search start indexvalue to search forvalue 2 to search for7dest index where it can be found, or "-1" if not foundvector to search start indexvalue to search forvalue 2 to search forvalue 3 to search for7dest index where it can be found, or "-1" if not found None None default valuenew sizenumber of elements to copy old arraySafe#A typeclass for hash tables in the V monad. The operations on these 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). Generalized update. Given a key k, and a user function f, calls:6`f Nothing` if the key did not exist in the hash table`f (Just v)` otherwiseIf the user function returns  (Nothing, _)L, then the value is deleted from the hash table. Otherwise the mapping for k2 is inserted or replaced with the provided value.1Returns the second part of the tuple returned by f.\Inserts a key/value 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).BA side-effecting map over the key-value records of a hash table. O(n). SLooks up the index of a key-value mapping in a hash table suitable for passing to  . Returns the next key-value mapping stored at the given index or at a greater index. The index, key, and value of the next record are returned. Computes the overhead (in words) per key-value mapping. Used for 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).      NoneB O2-element array, stores how many entries and deleted entries are in the table.3An 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:alter.,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.=  0NoneB 8in buckets, total size is numElemsInCacheLine * _sizeA 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_.')Find index of given key in the hashtable.(AFind the next entry in the hashtable starting at the given index.0 !"#$%& hash tableare we updating?keycache line start address 1cache line start address 2hash1hash2 hash table hash code 1 hash code 2 cache line 1 cache line 2keyvalue     '()*  !"#$%&'(  #$!"&%'(( !"#$%&     '()*NoneBOT +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.0,See the documentation for this function in Data.HashTable.Class#v:insert.2,See the documentation for this function in Data.HashTable.Class#v:mapM_.3,See the documentation for this function in Data.HashTable.Class#v:foldM.4,See the documentation for this function in &Data.HashTable.Class#v:computeOverhead.,See the documentation for this function in "Data.HashTable.Class#v:lookupIndex.%+,-./01234 !"#$%&'()56 +,-./01234 +,-./01234 +,-./01234 !"#$%&'()56NoneCT7/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 +.8,A type alias for the linear hash table. See Data.HashTable.ST.Linear.9,A type alias for the cuckoo hash table. See Data.HashTable.ST.Cuckoo.:OA 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:insert.>+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:lookupIndex.A+See the documentation for this function in "Data.HashTable.Class#v:nextByIndex.B+See the documentation for this function in Data.HashTable.Class#v:mutate.C,See the documentation for this function in Data.HashTable.Class#v:fromList.D,See the documentation for this function in +Data.HashTable.Class#v:fromListWithSizeHint.E+See the documentation for this function in Data.HashTable.Class#v:toList.F+See the documentation for this function in Data.HashTable.Class#v:foldM.G+See the documentation for this function in Data.HashTable.Class#v:mapM_.H,See the documentation for this function in &Data.HashTable.Class#v:computeOverhead.789:;<=>?@ABCDEFGH789:;<=>?@ABCDEFGH:987;<=>?BCDEGFH@A789:;<=>?@ABCDEFGH,     !"#$%&'()*+,-./0123456789:;<=>?@1ABCDEFGHIJKLMNOPQRST U U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x : ; <yz{ | } ~  }         R   y)hashtables-1.2.2.1-CF8d1vFYdjgHHn9YkTphzCData.HashTable.ClassData.HashTable.ST.BasicData.HashTable.ST.CuckooData.HashTable.ST.LinearData.HashTable.IO$Data.HashTable.Internal.UnsafeTricks Data.HashTable.Internal.IntArrayData.HashTable.Internal.Utils2Data.HashTable.Internal.CheapPseudoRandomBitStream!Data.HashTable.Internal.CacheLineData.HashTable.Internal.Array%Data.HashTable.Internal.Linear.Bucket HashTablenewnewSizedmutateinsertdeletelookupfoldMmapM_ lookupIndex nextByIndexcomputeOverheadfromListfromListWithSizeHinttoList $fMonoidSlot$fShowHashTable$fHashTableHashTable $fShowSlot$fShowSlotFindResponse IOHashTableLinearHashTableCuckooHashTableBasicHashTable TombStone EmptyElementDeletedElementKey emptyRecord deletedRecord keyIsEmpty keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElement cacheLineSizeElemIntArrayIAprimWordToElem elemToInt elemToInt#elemMaskwordSizeInBytesnewArray readArray writeArraylengthtoPtrcacheLineIntMaskwordSizenumElemsInCacheLinecacheLineIntBits whichBucket binarySearchbinarySearchBybinarySearchByBounds primeSizes nextBestPrimebumpSizeshiftLshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameTypebaseGHC.IO unsafeIOToST BitStream _curRandom _bitsLeft _randomPos random32s random64s numRandomsrandoms newBitStream getNextBitgetNBitssign#bl_abs#mask#maskcacheLineSearchcacheLineSearch2cacheLineSearch3prefetchCacheLine_writeprefetchCacheLine_readc_forwardSearch_3c_forwardSearch_2c_lineSearch_3c_lineSearch_2 c_lineSearchfI prefetchRead prefetchWriteforwardSearch2forwardSearch3 lineSearch lineSearch2 lineSearch3advanceByCacheLineSizeisCacheLineAlignedmaskw#(primitive-0.6.2.0-4578caNkWQ54Gt1mxLF2YhData.Primitive.Array MutableArrayBucket_Bucket _bucketSize _highwater_keys_valuesbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSize expandArrayexpandBucketArray growBucketTosnocsizeelemAtmovedebugGHC.STST_loadSlotFindResponse _slotFound_slotB0_slotB1Slot_slot HashTable__size_hashesSizeRefsHTintSzreadLoad writeLoad readDelLoad writeDelLoad newSizeRefs newSizedReal insertRecord checkOverflow rehashAll growTable findSafeSlotsdeleteFromSlotinsertIntoSlotbumpLoad bumpDelLoadmaxLoad emptyMarker deletedMarkertrueInt recordIsEmptyrecordIsDeletedrecordIsFilledhash hashToElemnewRefwriteRefreadRef_rng _maxAttemptslookup' searchOne foldMWorkmapMWorkinsert'mutate' updateOrFaildelete' cuckooOrFailgrow hashPrimehash1hash2 bumpFactor whichLine_level _splitptr_bucketssplitprimitiveInsertprimitiveInsert' fillFactorpower2hashKey hashAtLvl encodeIndex decodeIndex indexOffsetControl.Monad.Primitive PrimStateghc-prim GHC.TypesIO