This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
52
unikernel/duniverse/ocaml-asn1-combinators/src/asn_writer.ml
Normal file
52
unikernel/duniverse/ocaml-asn1-combinators/src/asn_writer.ml
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
(* Copyright (c) 2014-2017 David Kaloper Meršinjak. All rights reserved.
|
||||
See LICENSE.md. *)
|
||||
|
||||
let lex_compare cs1 cs2 =
|
||||
let (s1, s2) = String.(length cs1, length cs2) in
|
||||
let rec go i lim =
|
||||
if i = lim then
|
||||
compare s1 s2
|
||||
else
|
||||
match compare (String.get_uint8 cs1 i) (String.get_uint8 cs2 i) with
|
||||
| 0 -> go (succ i) lim
|
||||
| n -> n in
|
||||
go 0 (min s1 s2)
|
||||
|
||||
type t = int * (int -> bytes -> unit)
|
||||
|
||||
let immediate n f = (n, f)
|
||||
|
||||
let len (n, _) = n
|
||||
|
||||
let empty = (0, (fun _ _ -> ()))
|
||||
|
||||
let (<+>) (l1, w1) (l2, w2) =
|
||||
let w off buf =
|
||||
( w1 off buf ; w2 (off + l1) buf ) in
|
||||
(l1 + l2, w)
|
||||
|
||||
let append = (<+>)
|
||||
|
||||
let rec concat = function
|
||||
| [] -> empty
|
||||
| w::ws -> w <+> concat ws
|
||||
|
||||
let of_list lst =
|
||||
let open List in
|
||||
let w off buf =
|
||||
iteri (fun i -> Bytes.set_uint8 buf (off + i)) lst in
|
||||
(length lst, w)
|
||||
|
||||
let of_octets str =
|
||||
let n = String.length str in
|
||||
(n, fun off buf -> Bytes.blit_string str 0 buf off n)
|
||||
|
||||
let of_byte b = (1, fun off buf -> Bytes.set_uint8 buf off b)
|
||||
|
||||
let to_octets (n, w) =
|
||||
let buf = Bytes.create n in
|
||||
w 0 buf;
|
||||
Bytes.unsafe_to_string buf
|
||||
|
||||
let to_writer (n, w) = (n, fun buf -> w 0 buf)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue