package decompress
Implementation of Zlib in OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
decompress-v0.9.0.tbz
sha256=70dd782b258a51a37c3971b9bd96c656b161876d781e168a626e9bb437833e3b
sha512=34033405c8dca30f67c39cad8f50875e255644d0e0b88019091d59932aaf90d87445070228291b1d3d1c07a98ce97aeca11554daf1a8f3b04d043b4f6c1ab83c
doc/src/decompress.impl/decompress_heap.ml.html
Source file decompress_heap.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
type t = {mutable buffer: int array; mutable length: int} let make size = {buffer= Array.make (size * 2) 0; length= 0} let get_parent i = (i - 2) / 4 * 2 let get_child i = (2 * i) + 2 exception Break let push index value ({buffer; length} as heap) = let swap i j = let t = buffer.(i) in buffer.(i) <- buffer.(j) ; buffer.(j) <- t in buffer.(length) <- value ; buffer.(length + 1) <- index ; let current = ref length in ( try while !current > 0 do let parent = get_parent !current in if buffer.(!current) > buffer.(parent) then ( swap !current parent ; swap (!current + 1) (parent + 1) ; current := parent ) else raise Break done with Break -> () ) ; heap.length <- length + 2 let pop ({buffer; length} as heap) = let swap i j = let t = buffer.(i) in buffer.(i) <- buffer.(j) ; buffer.(j) <- t in let value = buffer.(0) in let index = buffer.(1) in heap.length <- length - 2 ; buffer.(0) <- buffer.(heap.length) ; buffer.(1) <- buffer.(heap.length + 1) ; let parent = ref 0 in ( try while true do let current = get_child !parent in if current >= heap.length then raise Break ; let current = if current + 2 < heap.length && buffer.(current + 2) > buffer.(current) then current + 2 else current in if buffer.(current) > buffer.(!parent) then ( swap current !parent ; swap (current + 1) (!parent + 1) ) else raise Break ; parent := current done with Break -> () ) ; (index, value) let length {length; _} = length
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>