mirror of
https://gitlab.com/scemama/qmcchem.git
synced 2024-12-21 20:03:31 +01:00
Implemented to_bytes in OCaml
This commit is contained in:
parent
6fe10712d0
commit
5b1379fd9c
@ -51,6 +51,33 @@ let of_string s =
|
||||
|
||||
|
||||
|
||||
let zero =
|
||||
bytes_of_int 0
|
||||
|
||||
let to_bytes b =
|
||||
(* [ Length of b
|
||||
[ Length of value ;
|
||||
Value ;
|
||||
Length of weight ;
|
||||
Weight ;
|
||||
... ] ] *)
|
||||
let l =
|
||||
[ Property.to_bytes b.property ;
|
||||
Sample.to_bytes b.value ;
|
||||
Weight.to_bytes b.weight ;
|
||||
bytes_of_int b.pid ;
|
||||
Block_id.to_bytes b.block_id ;
|
||||
Compute_node.to_bytes b.compute_node ]
|
||||
|> List.map (fun x -> [ bytes_of_int (Bytes.length x) ; x ] )
|
||||
|> List.concat
|
||||
in
|
||||
let result =
|
||||
Bytes.concat Bytes.empty (zero :: l)
|
||||
in
|
||||
Bytes.set_int64_le result 8 (Int64.of_int (Bytes.length result));
|
||||
result
|
||||
|
||||
|
||||
let to_string b =
|
||||
Printf.sprintf "%s %s # %s %s %s %d"
|
||||
(Sample.to_string b.value )
|
||||
@ -60,7 +87,11 @@ let to_string b =
|
||||
(string_of_int b.pid)
|
||||
(Block_id.to_int b.block_id)
|
||||
|
||||
|
||||
(*
|
||||
let of_string s =
|
||||
Bytes.of_string s
|
||||
|> of_bytes
|
||||
*)
|
||||
|
||||
let dir_name = lazy(
|
||||
let ezfio_filename =
|
||||
|
@ -45,3 +45,12 @@ let to_string = function
|
||||
|> String.concat " "
|
||||
|> Printf.sprintf "%s"
|
||||
|
||||
let to_bytes = function
|
||||
| One_dimensional x -> Qptypes.bytes_of_float x
|
||||
| Multidimensional (x,_) ->
|
||||
let b = Bytes.create (8 * Array.length x) in
|
||||
Array.iteri (fun i x ->
|
||||
Int64.bits_of_float x
|
||||
|> Bytes.set_int64_le b (i*8) ) x;
|
||||
b
|
||||
|
||||
|
@ -4,5 +4,6 @@ val to_float_array : t -> float array
|
||||
val of_float : float -> t
|
||||
val of_float_array : dim:int -> float array -> t
|
||||
val to_string : t -> string
|
||||
val to_bytes : t -> bytes
|
||||
val dimension : t -> int
|
||||
|
||||
|
@ -4,7 +4,12 @@ let global_replace x =
|
||||
|> Str.global_replace (Str.regexp "Float.of_string") "float_of_string"
|
||||
|> Str.global_replace (Str.regexp "Int.to_string") "string_of_int"
|
||||
|> Str.global_replace (Str.regexp "Int.of_string") "int_of_string"
|
||||
|> Str.global_replace (Str.regexp "Int.to_bytes") "bytes_of_int"
|
||||
|> Str.global_replace (Str.regexp "Int64.to_bytes") "bytes_of_int64"
|
||||
|> Str.global_replace (Str.regexp "Float.to_bytes") "bytes_of_float"
|
||||
|> Str.global_replace (Str.regexp "Int.of_bytes") "int_of_bytes"
|
||||
|> Str.global_replace (Str.regexp "String.\\(to\\|of\\)_string") ""
|
||||
|> Str.global_replace (Str.regexp "String.to_bytes") "Bytes.of_string"
|
||||
|
||||
let input_data = "
|
||||
* Positive_float : float
|
||||
@ -167,6 +172,20 @@ let input_ezfio = "
|
||||
|
||||
|
||||
let untouched = "
|
||||
let bytes_of_int64 i =
|
||||
let result = Bytes.create 8 in
|
||||
Bytes.set_int64_le result 0 i;
|
||||
result
|
||||
|
||||
let bytes_of_int i =
|
||||
Int64.of_int i
|
||||
|> bytes_of_int64
|
||||
|
||||
|
||||
let bytes_of_float f =
|
||||
Int64.of_float f
|
||||
|> bytes_of_int64
|
||||
|
||||
"
|
||||
|
||||
let template = format_of_string "
|
||||
@ -175,11 +194,13 @@ module %s : sig
|
||||
val to_%s : t -> %s
|
||||
val of_%s : %s %s -> t
|
||||
val to_string : t -> string
|
||||
val to_bytes : t -> bytes
|
||||
end = struct
|
||||
type t = %s [@@deriving sexp]
|
||||
let to_%s x = x
|
||||
let of_%s %s x = ( %s x )
|
||||
let to_string x = %s.to_string x
|
||||
let to_bytes x = %s.to_bytes x
|
||||
end
|
||||
|
||||
"
|
||||
@ -203,7 +224,7 @@ let parse_input input=
|
||||
and name = String_ext.strip name in
|
||||
let typ_cap = String.capitalize_ascii typ in
|
||||
let newstring = Printf.sprintf template name typ typ typ params_val typ typ
|
||||
typ typ params ( String_ext.strip text ) typ_cap
|
||||
typ typ params ( String_ext.strip text ) typ_cap typ_cap
|
||||
in
|
||||
List.rev (parse (newstring::result) tail )
|
||||
in
|
||||
@ -223,9 +244,11 @@ module %s : sig
|
||||
val get_max : unit -> %s
|
||||
val of_%s : ?min:%s -> ?max:%s -> %s -> t
|
||||
val to_string : t -> string
|
||||
val to_bytes : t -> bytes
|
||||
end = struct
|
||||
type t = %s [@@deriving sexp]
|
||||
let to_string x = %s.to_string x
|
||||
let to_bytes x = %s.to_bytes x
|
||||
let get_max () =
|
||||
if (Ezfio.has_%s ()) then
|
||||
Ezfio.get_%s ()
|
||||
@ -271,9 +294,10 @@ let parse_input_ezfio input=
|
||||
| [ name ; typ ; ezfio_func ; min ; max ; msg ] -> (name, typ, ezfio_func, min, max, msg)
|
||||
| _ -> assert false
|
||||
in
|
||||
let typ_cap = String.capitalize_ascii typ in
|
||||
Printf.sprintf ezfio_template
|
||||
name typ typ typ typ typ typ typ typ (String.capitalize_ascii typ)
|
||||
ezfio_func ezfio_func max min typ typ max msg min name (String.capitalize_ascii typ)
|
||||
name typ typ typ typ typ typ typ typ typ_cap typ_cap
|
||||
ezfio_func ezfio_func max min typ typ max msg min name typ_cap
|
||||
end
|
||||
| _ -> failwith "Error in input_ezfio"
|
||||
in
|
||||
@ -355,9 +379,9 @@ match msg with " ] @
|
||||
|
||||
(** Main *)
|
||||
let () =
|
||||
print_endline untouched;
|
||||
parse_input input_data ;
|
||||
parse_input_ezfio input_ezfio;
|
||||
print_endline untouched;
|
||||
create_ezfio_handler ()
|
||||
|
||||
|
||||
|
@ -145,6 +145,10 @@ let to_string = function
|
||||
for p in properties_qmcvar:
|
||||
print >>file, """| %(P)s -> "%(P)s" """%{'P':p[1].capitalize(), 'p':p[1]}
|
||||
print >>file, """;;
|
||||
|
||||
let to_bytes x =
|
||||
to_string x
|
||||
|> Bytes.of_string
|
||||
"""
|
||||
|
||||
# is_scalar
|
||||
|
Loading…
Reference in New Issue
Block a user