summaryrefslogtreecommitdiff
path: root/lib/ocaml_rts/linksem/src_lem_library/xstring.ml
diff options
context:
space:
mode:
authorBrian Campbell2017-09-18 16:31:56 +0100
committerBrian Campbell2017-09-18 16:31:56 +0100
commit4d83d5cf11751b990055963797b5919bf7c22b0b (patch)
tree329c2cd838c467430146ceafd662f6a8a7091d40 /lib/ocaml_rts/linksem/src_lem_library/xstring.ml
parentd7d7b781e91abbefca7e7a037c4109b3db89f958 (diff)
parent4e7a568bb57337d41dda893044ed84b66e62752f (diff)
Merge branch 'experiments' into mono-experiments
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;;