source: Deliverables/D2.2/8051-indexed-labels-branch/src/utilities/extArray.ml @ 1349

Last change on this file since 1349 was 1349, checked in by tranquil, 10 years ago
  • work on LIN completed
  • small implementation of extensible arrays
File size: 858 bytes
Line 
1type +'a t = {
2        mutable t_cont : 'a array;
3        mutable t_length : int;
4        t_def : 'a
5}
6
7let default_buffer_size = 4
8
9let make n a =
10        let m = min default_buffer_size n in
11        {t_cont = Array.make m a; t_length = n; t_def = a}
12       
13let default v = v.t_def
14
15let get v n =
16        (if n < 0 || n >= v.t_length then invalid_arg "out of bounds");
17        v.t_cont.(n)
18
19
20let length v = v.t_length
21
22let chop v n = v.t_length <- max 0 (v.t_length - n)
23
24let assure v n =
25        let m = Array.length v.t_cont in
26        (if n >= m then
27                let d = n / m + 1 in
28                let new_arr = Array.make (d * m) v.t_def in
29                Array.blit v.t_cont 0 new_arr 0 m;
30                v.t_cont <- new_arr);
31   v.t_length <- max v.t_length (m + 1)
32
33       
34       
35let extend v n = assure v (v.t_length + n)
36
37let set v n a =
38          (if n < 0 then invalid_arg "out of bounds");
39    assure v n;
40                v.t_cont.(n) <- a;
41
42let append v a = set v (v.t_length) a
43       
44       
45
Note: See TracBrowser for help on using the repository browser.