package camomile
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
A Unicode library
Install
dune-project
Dependency
github.com
Readme
Changelog
LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception License
Edit opam file
Versions (6)
Authors
Maintainers
Sources
camomile-1.0.1.tbz
sha256=c23b0a39cb36fd130168d3eba7cb4a91fbd35982b6cb2320ce5b06f271965a07
md5=82e016653431353a07f22c259adc6e05
doc/src/camomile.library/bitsvect.ml.html
Source file bitsvect.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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124# 1 "Camomile/internal/bitsvect.ml" (** bits vector *) (* Copyright (C) 2002 Yamagata Yoriyuki. *) (* This library is free software; you can redistribute it and/or *) (* modify it under the terms of the GNU Lesser General Public License *) (* as published by the Free Software Foundation; either version 2 of *) (* the License, or (at your option) any later version. *) (* As a special exception to the GNU Library General Public License, you *) (* may link, statically or dynamically, a "work that uses this library" *) (* with a publicly distributed version of this library to produce an *) (* executable file containing portions of this library, and distribute *) (* that executable file under terms of your choice, without any of the *) (* additional requirements listed in clause 6 of the GNU Library General *) (* Public License. By "a publicly distributed version of this library", *) (* we mean either the unmodified Library as distributed by the authors, *) (* or a modified version of this library that is distributed under the *) (* conditions defined in clause 3 of the GNU Library General Public *) (* License. This exception does not however invalidate any other reasons *) (* why the executable file might be covered by the GNU Library General *) (* Public License . *) (* This library is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *) (* Lesser General Public License for more details. *) (* You should have received a copy of the GNU Lesser General Public *) (* License along with this library; if not, write to the Free Software *) (* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *) (* USA *) (* You can contact the authour by sending email to *) (* yoriyuki.y@gmail.com *) let rec bits n = if n = 0 then 0 else 1 + bits (n lsr 1) type t = {len : int; mutable bits : int; mutable contents : Bytes.t; mutable id : int} (* get v i : read the i-th element of v *) (* b < 8 *) let get vect i = let b = vect.bits in let v = vect.contents in let k = b * i in let m0 = ((Char.code (Bytes.get v (k lsr 3))) lsr (k land 0b111)) in let m = ((Char.code (Bytes.get v ((k lsr 3) + 1))) lsl (8 - (k land 0b111))) lor m0 in m land ((1 lsl b) - 1) let unsafe_get vect i = let b = vect.bits in let v = vect.contents in let k = b * i in let j = k lsr 3 in let v1 = Char.code (Bytes.unsafe_get v j) in let v2 = Char.code (Bytes.unsafe_get v (j + 1)) in let j' = k land 0b111 in (v2 lsl (8 - j')) lor (v1 lsr j') land ((1 lsl b) - 1) let set_raw vect i n = let b = vect.bits in let v = vect.contents in let i0 = (i * b) lsr 3 in let i1 = (i * b) land 7 in let masq1 = (1 lsl b - 1) in let c0 = (Char.code (Bytes.get v i0)) land (lnot (masq1 lsl i1)) in let c0' = c0 lor ((n lsl i1) land 255) in Bytes.set v i0 (Char.chr c0'); if b + i1 <= 8 then () else let masq2 = (1 lsl (b + i1 - 8)) - 1 in let c1 = (Char.code (Bytes.get v (i0 + 1))) land (lnot masq2) in let c1' = c1 lor (n lsr (8 - i1)) in Bytes.set v (i0 + 1) (Char.chr c1') let bits_to_bytes b = b / 8 + 2 let set vect i n = let b = bits n in if vect.bits < b then let save = {len = vect.len; bits = vect.bits; contents = vect.contents; id = 0} in let len = vect.len in vect.contents <- Bytes.make (bits_to_bytes (b * len)) (Char.chr 0); vect.bits <- b; for i = 0 to len - 1 do set_raw vect i (get save i) done; else (); set_raw vect i n let make i0 df = let b = max (bits df) 1 in let v = {len = i0; bits = b; contents = Bytes.make (bits_to_bytes (b * i0)) (Char.chr 0); id = 0} in for i = 0 to i0 - 1 do set v i df done; v let copy v = {len = v.len; bits = v.bits; contents = Bytes.copy v.contents; id = 0} let iteri proc v = for i = 0 to v.len - 1 do proc i (get v i) done let length v = v.len let set_id v id = v.id <- id let id v = v.id
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>