summaryrefslogtreecommitdiff
path: root/lib/ocaml_rts/linksem/src_lem_library/xstring.ml
diff options
context:
space:
mode:
authorAlasdair Armstrong2017-09-07 16:54:20 +0100
committerAlasdair Armstrong2017-09-07 16:54:20 +0100
commit842165c1171fde332bd42e7520338c59a797f76b (patch)
tree75b61297b6d9b6e4810542390eb1371afc2f183f /lib/ocaml_rts/linksem/src_lem_library/xstring.ml
parent8124c487b576661dfa7a0833415d07d0978bc43e (diff)
Add ocaml run-time and updates to sail for ocaml backend
Diffstat (limited to 'lib/ocaml_rts/linksem/src_lem_library/xstring.ml')
-rw-r--r--lib/ocaml_rts/linksem/src_lem_library/xstring.ml22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/ocaml_rts/linksem/src_lem_library/xstring.ml b/lib/ocaml_rts/linksem/src_lem_library/xstring.ml
new file mode 100644
index 00000000..7a705aeb
--- /dev/null
+++ b/lib/ocaml_rts/linksem/src_lem_library/xstring.ml
@@ -0,0 +1,22 @@
+let explode s =
+ let rec exp i l =
+ if i < 0 then l else exp (i - 1) (s.[i] :: l) in
+ exp (String.length s - 1) [];;
+
+let implode l =
+ let res = String.create (List.length l) in
+ let rec imp i = function
+ | [] -> res
+ | c :: l -> res.[i] <- c; imp (i + 1) l in
+ imp 0 l;;
+
+let string_case s c_empty c_cons = begin
+ let len = String.length s in
+ if (len = 0) then c_empty else
+ c_cons (String.get s 0) (String.sub s 1 (len - 1))
+end;;
+
+let cons_string c s = begin
+ let cs = String.make 1 c in
+ cs ^ s
+end;;