package conan
Identify type of your file (such as the MIME type)
Install
Dune Dependency
Authors
Maintainers
Sources
conan-0.0.6.tbz
sha256=b210257b881715ffb9dcbf88678c8559ec2aef26795a5304afd5a8b4bbf11e16
sha512=5b46c70c237a6c40b1119bdc33e30fb4911d9f60e5b6bc3976604a0a4bd17635ecbb0862b9944e6022090ab0f1d01bd5e1832b465a7c2c5328e88d7cf23c2e40
doc/src/conan/offset.ml.html
Source file offset.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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
let ( <.> ) f g x = f (g x) let ok x = Ok x type t = | Relative of t | Absolute of t | Value of int64 | Read of t * Size.t | Calculation of t * t Arithmetic.t let rec serialize ppf = function | Relative v -> Format.fprintf ppf "Conan.Offset.Relative@ @[%a@]" (Serialize.parens serialize) v | Absolute v -> Format.fprintf ppf "Conan.Offset.Absolute@ @[%a@]" (Serialize.parens serialize) v | Value v -> Format.fprintf ppf "Conan.Offset.Value@ %a" Serialize.int64 v | Read (v, s) -> Format.fprintf ppf "Conan.Offset.Read@ @[%a@]" (Serialize.pair (Serialize.parens serialize) Size.serialize) (v, s) | Calculation (v, arithmetic) -> Format.fprintf ppf "Conan.Offset.Calculation@ @[%a@]" (Serialize.pair (Serialize.parens serialize) (Arithmetic.serialize (Serialize.parens serialize))) (v, arithmetic) let pf = Format.fprintf let rec pp ppf = function | Relative v -> pf ppf "&%a" pp v | Absolute v -> pf ppf "%a" pp v | Value v -> pf ppf "%Ld" v | Read (Calculation (v, c), s) -> pf ppf "(%a.%a[%a])" pp v Size.pp s (Arithmetic.pp pp) c | Read (v, s) -> pf ppf "(%a.%a)" pp v Size.pp s | Calculation (v, c) -> pf ppf "%a[%a]" pp v (Arithmetic.pp pp) c open Sigs let process : type s fd error. s scheduler -> (fd, error, s) syscall -> fd -> t -> int64 -> ((int64, error) result, s) io = fun ({ bind; return } as scheduler) syscall fd offset abs_offset -> let ( >>= ) = bind in let ( >?= ) x f = x >>= function Ok x -> f x | Error err -> return (Error err) in (* XXX(dinosaure): we want to calculate at any steps the absolute offset instead to trust on [CUR] and we try to use only [SET] with [seek]. However, in some case (eg. [offset use name]), we must lie about the /absolute offset/. *) let rec go_offset = function | Read (Calculation (v, c), s) -> go_offset v >?= fun abs_offset -> syscall.seek fd abs_offset SET >?= fun () -> Size.read scheduler syscall fd s >?= fun abs_offset -> go_calculation abs_offset c | Read (v, s) -> go_offset v >?= fun abs_offset -> syscall.seek fd abs_offset SET >?= fun () -> Size.read scheduler syscall fd s | Relative v -> go_offset v >?= fun rel_offset -> (return <.> ok) (Int64.add abs_offset rel_offset) | Absolute v -> go_offset v | Value v -> (return <.> ok) v | Calculation (v, c) -> go_offset v >?= fun abs_offset -> go_calculation abs_offset c and go_calculation abs_offset = function | Arithmetic.Invert c -> go_calculation abs_offset c >?= fun abs_offset -> (return <.> ok) (Int64.lognot abs_offset) | Arithmetic.Add v -> go_offset v >?= fun v -> (return <.> ok) (Int64.add abs_offset v) | Arithmetic.Sub v -> go_offset v >?= fun v -> (return <.> ok) (Int64.sub abs_offset v) | Arithmetic.Mul v -> go_offset v >?= fun v -> (return <.> ok) (Int64.mul abs_offset v) | Arithmetic.Div v -> go_offset v >?= fun v -> (return <.> ok) (Int64.div abs_offset v) | Arithmetic.Mod v -> go_offset v >?= fun v -> (return <.> ok) (Int64.rem abs_offset v) | Arithmetic.Bitwise_and v -> go_offset v >?= fun v -> (return <.> ok) (Int64.logand abs_offset v) | Arithmetic.Bitwise_xor v -> go_offset v >?= fun v -> (return <.> ok) (Int64.logxor abs_offset v) | Arithmetic.Bitwise_or v -> go_offset v >?= fun v -> (return <.> ok) (Int64.logor abs_offset v) in go_offset offset
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>