úÎc]Zr†      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw x y z { | } ~  €  ‚ ƒ „ … None†‡ˆ‰Š‹Œ†Š†‡ˆ‰Š‹ŒNoneNone'Create a new HashTable with fixed size O(log n). Insert a key/value pair into HashTable. O(log n). Lookup a key in HashTable. O(log n). Delete a key from HashTable. O(1)#. Grab the size of the hash table. O(n). Get a list of key/ value pairs. O(n). Get a list of keys. Ž‘’“   Ž‘’“  Safe-Inferred     None ”   ”None  !  ! ! ! None3"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ•–—0"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ068795243./01%&'()*+,-:"#$;<=>?@ABCDEFGHIJKLMNOPQ""#$%&'()*+,-./0124356879:;<=>?@ABCDEFGHIJKLMNOPQ•–—NoneRSTUVWXYZ[\]^_`˜™RSTUVWXYZ[\]^_`_`\^]UVWXYZ[RSTRSTUVWXYZ[\^]_`˜™None#a&Type aliases to shorten result types. b$Type aliases to shorten cache type. c8Needed to generate the split-keys used in branch nodes. dGiven two keys, a <% c, compute a new key b, such that a <= b < c. J Default is to choose a, however a smarter instance exist for ByteString. eKSome type-fu. Context (Value v) gives the context (Eq v, Serialize v, ...) fJSome type-fu. Context (Key k) gives the context (Ord k, Serialize k, ...) šType aliases to ease reading. ›helpers gJMake a new tree parameter from order, root node and cache parameter. When  no root node is given, _+ 0 will be used and a new tree initialised B here. This may overwrite an existing tree. Is used together with h. hh> takes a tree parameter and a group of operations in a BTreeM % monad and exectures the operations. œ"Get next unique node reference id "Queue marked node for rebalancing žGet root reference id Ÿ3Fetch node from reference id; error when not found  Store node in new ref Ą4Split a node in two, resulting in a new parent node iO(log n)@. Insert key-value pair into current tree. After this operation  k k will yield Just v.. If the key already exists it is overridden. L If you want the overridden value, or want different behaviour when the key  exists see l. i may leave the tree  unbalanced", skewed or with underfull nodes. + The tree can be re-balanced by starting a n. ! execTree p $ insert 42 "foobar" jO(log n)?. Delete a key from the tree. The deleted value is returned as  Just v if present, otherwise Nothing is returned.  execTree p $ delete 42 kO(log n). Lookup key in current tree. , execTree p $ do insert 42 "foo" -- () 4 a <- lookup 42 -- Just "foo" , insert 42 "bar" -- () 4 b <- lookup 42 -- Just "bar" 4 delete 42 -- Just "bar" 1 c <- lookup 42 -- Nothing K return (a, b, c) -- (Just "foo", Just "bar", Nothing) lO(log n). Replace the value of k with f v v', where v' is the  current value. The old value v'* is returned after the replacement. If no  current value exist, v is inserted. The semantics is the same as    . const.  execTree p $ do delete 42 @ modify subtract 42 1 -- inserts (42, 1) @ modify subtract 42 1 -- updates to (42, 0) @ modify subtract 42 1 -- updates to (42, -1) mPCalculate the height of the tree, i.e. the longest node path from root to leaf. ˘@Modify a leaf in current tree and return result of modification nIA process for background rebalancing. Start inside its own thread, since 4 this will run forever. Stop by killing the thread. $ pid <- forkIO $ rebalanceProcess p ! -- Perform safe tree operations  killThread pid Ł3Rebalance until no more rebalancing can take place ¤Perform rebalancing. / Moves the tree one step closer to rebalancing oIConvert the tree into a list of key-value pairs. This function may crash  if used together with n. pJSave the tree by flushing the underlying cache to the permanent store and  return a ref to the root node. qLookup minimum key rLookup maximum key s&Fold with key in left to right order. t&Fold with key in right to left order. u7A generalised way of querying the tree. Given two keys a <= b the  function needs to answer True or False as to whether the interval [a,  b]@ contains interesting keys. No all keys in the interval need be H interesting. This function will then return all interesting keys in an  efficient way. Ľ0Instance for Bytestring that yields short keys. ŚDummy instance. §Dummy instance. +abcdef¨š›ŠgOrder of tree. Optional root node. Cache parameter. The result in monadIO hTree parameter (see g) Tree instance #The result inside the chosen monad œžŸ Ąikey  value to associate with the key jkey The previous value if present kkey The value if present lf. computes the new value from old and default. key /Default value is used when no other is present The previous value if present Şm˘nTree parameter.  ThreadId ٤ŤŹ­Žo The list of (key, value) pairs. p_ to the root node. qrstuf defines interesting intervals $A list of chosen (key, value) pairs vf defines interesting intervals $A list of chosen (key, value) pairs ĽŚ§abcdefghijklmnopqrstuvghfecdbaijklpnostuvqrm*abcdef¨š›ŠghœžŸ ĄijklŞm˘n٤ŤŹ­ŽopqrstuvĽŚ§ Nonewxyz{|}~€‚ƒ„…wxyz{|}~€‚ƒ„…{|}~€‚ƒ„…zyxwwxyz{ |}~€‚ƒ„…Ż  !"#$%&'(()*+,-./011234546789:;<=>?@ABCDEFGHIJK#LMNNOPQRSTUVW11XYZ[\]^_`abcdefghi j k % l m ` n o  p  q h f  r r s t u v wxyz{|}~€‚ƒ(„@…†‡ˆ‰Š‹ŒŽG‘’“”•btree-concurrent-0.1.5Data.BTree.KVBackend.UtilData.BTree.HashTable.STMData.BTree.KVBackend.ClassData.BTree.KVBackend.FilesData.BTree.Cache.ClassData.BTree.Cache.STMData.BTree.TypesData.BTree.BTreeData.BTree.ClassData.BTree.UUIDData.MapinsertLookupWithKeyatomicFileWrite safeWriteFile safeReadFile HashTableSTMnewSizedinsertlookupdeletesizetoListkeys KVBackendstorefetchremoveFilesKV runFilesKVParam evalFilesKV traceThisfilePathCachesyncevalRFinalInterCacheSTM runCacheSTM cacheSizetabletoIOflushQ timestampgenId genActiveRefrefSTrefExtExistNoExist AccessTimeStateWriteReadmtoStracestm evalCacheSTM sizedParamgetRefnewRef maybeQueuefetchGen updateTagdebuggetGen flipWriteequalsvaluewithGenerationflushflushKeyliftSTMfailBTreeM runBTreeMorderrootstatemarkedunusedNodeBranchLeaf TreeResult TreeBackendIntervalbetweenValueKey makeParamexecTreemodifyheightrebalanceProcesssavefindMinfindMaxfoldlifoldrisearchsearch_SCpNTreemodify_ modifyManydelete_memberUUIDunUUIDuuidsuuid $fShowUUID$fSerializeUUIDbucketscountgetArrayBucketbucket modifyCount$fKVBackendFilesKVkv$fCacheCacheSTMParamkv $fErrorIO $fShowState$fSerializeNode$fSerializeRefifM addMarkedroot'fetch'storeNewsplit modifyLeaf rebalanceAll rebalance$fIntervalByteString$fValuev$fKeyk CacheSTMP findChild rebalance' rebalanceKey deleteByFst