2222 * along with this program; if not, write to the Free Software
2323 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *)
2424
25- open Caml_bytes_extern
25+
26+ external new_uninitialized : int -> bytes = " Array" [@@ bs.new ]
27+
28+ external (.! [] ) : bytes -> int -> char = " %bytes_unsafe_get"
29+ external (.! [] < - ) : bytes -> int -> char -> unit = " %bytes_unsafe_set"
30+ external length : bytes -> int = " %bytes_length"
31+
32+
2633
2734let get s i =
2835 if i < 0 || i > = length s then
2936 raise (Invalid_argument " index out of bounds" )
30- else unsafe_get s i
37+ else s. ! [i]
3138
3239let caml_fill_bytes (s : bytes ) i l (c : char ) =
3340 if l > 0 then
3441 for k = i to l + i - 1 do
35- unsafe_set s k c
42+ s. ! [k] < - c
3643 done
3744
3845let caml_create_bytes len : bytes =
@@ -41,7 +48,7 @@ let caml_create_bytes len : bytes =
4148 else
4249 let result = new_uninitialized len in
4350 for i = 0 to len - 1 do
44- unsafe_set result i '\000'
51+ result. ! [i] < - '\000'
4552 done ;
4653 result
4754
@@ -53,14 +60,14 @@ let copyWithin (s1 : bytes) i1 i2 len =
5360 let range_b = len - 1 in
5461 let range = if range_a > range_b then range_b else range_a in
5562 for j = range downto 0 do
56- unsafe_set s1 ( i2 + j) (unsafe_get s1 ( i1 + j))
63+ s1. ! [ i2 + j] < - s1. ! [ i1 + j]
5764 done
5865 else if i1 > i2 then
5966 let range_a = length s1 - i1 - 1 in
6067 let range_b = len - 1 in
6168 let range = if range_a > range_b then range_b else range_a in
6269 for k = 0 to range do
63- unsafe_set s1 ( i2 + k) (unsafe_get s1 ( i1 + k))
70+ s1. ! [ i2 + k] < - s1. ! [ i1 + k]
6471 done
6572
6673(* TODO: when the compiler could optimize small function calls,
@@ -74,20 +81,20 @@ let caml_blit_bytes (s1:bytes) i1 (s2:bytes) i2 len =
7481 let off1 = length s1 - i1 in
7582 if len < = off1 then
7683 for i = 0 to len - 1 do
77- unsafe_set s2 ( i2 + i) (unsafe_get s1 ( i1 + i))
84+ s2. ! [ i2 + i] < - s1. ! [ i1 + i]
7885 done
7986 else
8087 begin
8188 for i = 0 to off1 - 1 do
82- unsafe_set s2 ( i2 + i) (unsafe_get s1 ( i1 + i))
89+ s2. ! [ i2 + i] < - s1. ! [ i1 + i]
8390 done ;
8491 for i = off1 to len - 1 do
85- unsafe_set s2 ( i2 + i) '\000'
92+ s2. ! [ i2 + i] < - '\000'
8693 done
8794 end
8895
8996external to_int_array : bytes -> int array = " %identity"
90- let string_of_large_bytes bytes i len =
97+ let string_of_large_bytes ( bytes : bytes ) i len =
9198 let s = ref " " in
9299 let s_len = ref len in
93100 let seg = 1024 in
@@ -118,15 +125,15 @@ let caml_blit_string (s1 : string) i1 (s2 : bytes) i2 (len : int ) =
118125 let off1 = Caml_string_extern. length s1 - i1 in
119126 if len < = off1 then
120127 for i = 0 to len - 1 do
121- unsafe_set s2 ( i2 + i) ( Caml_string_extern. unsafe_get s1 (i1 + i) )
128+ s2. ! [ i2 + i] < - Caml_string_extern. unsafe_get s1 (i1 + i)
122129 done
123130 else
124131 begin
125132 for i = 0 to off1 - 1 do
126- unsafe_set s2 ( i2 + i) ( Caml_string_extern. unsafe_get s1 (i1 + i) )
133+ s2. ! [ i2 + i] < - Caml_string_extern. unsafe_get s1 (i1 + i)
127134 done ;
128135 for i = off1 to len - 1 do
129- unsafe_set s2 ( i2 + i) '\000'
136+ s2. ! [ i2 + i] < - '\000'
130137 done
131138 end
132139
@@ -135,7 +142,7 @@ let bytes_of_string s =
135142 let len = Caml_string_extern. length s in
136143 let res = new_uninitialized len in
137144 for i = 0 to len - 1 do
138- unsafe_set res i ( Caml_string_extern. unsafe_get s i)
145+ res. ! [i] < - Caml_string_extern. unsafe_get s i
139146 (* Note that when get a char and convert it to int immedately, should be optimized
140147 should be [s.charCodeAt[i]]
141148 *)
@@ -145,7 +152,7 @@ let bytes_of_string s =
145152
146153 let rec caml_bytes_compare_aux (s1 : bytes ) (s2 : bytes ) off len def =
147154 if off < len then
148- let a, b = Caml_bytes_extern. unsafe_get s1 off, Caml_bytes_extern. unsafe_get s2 off in
155+ let a, b = s1. ! [ off], s2. ! [ off] in
149156 if a > b then 1
150157 else if a < b then - 1
151158 else caml_bytes_compare_aux s1 s2 (off + 1 ) len def
@@ -160,7 +167,7 @@ let bytes_of_string s =
160167
161168*)
162169let caml_bytes_compare (s1 : bytes ) (s2 : bytes ) : int =
163- let len1, len2 = Caml_bytes_extern. length s1, Caml_bytes_extern. length s2 in
170+ let len1, len2 = length s1, length s2 in
164171 if len1 = len2 then
165172 caml_bytes_compare_aux s1 s2 0 len1 0
166173 else if len1 < len2 then
@@ -171,12 +178,12 @@ let caml_bytes_compare (s1 : bytes) (s2 : bytes) : int =
171178let rec caml_bytes_equal_aux (s1 : bytes ) s2 (off : int ) len =
172179 if off = len then true
173180 else
174- let a, b = Caml_bytes_extern. unsafe_get s1 off, Caml_bytes_extern. unsafe_get s2 off in
181+ let a, b = s1. ! [ off], s2. ! [ off] in
175182 a = b
176183 && caml_bytes_equal_aux s1 s2 (off + 1 ) len
177184
178185let caml_bytes_equal (s1 : bytes ) (s2 : bytes ) : bool =
179- let len1, len2 = Caml_bytes_extern. length s1, Caml_bytes_extern. length s2 in
186+ let len1, len2 = length s1, length s2 in
180187 len1 = len2 &&
181188 caml_bytes_equal_aux s1 s2 0 len1
182189
0 commit comments