Abstract result sets beind a Node_list interface.
[tatoo.git] / src / naive_node_list.ml
1 (***********************************************************************)
2 (*                                                                     *)
3 (*                               TAToo                                 *)
4 (*                                                                     *)
5 (*                     Kim Nguyen, LRI UMR8623                         *)
6 (*                   Université Paris-Sud & CNRS                       *)
7 (*                                                                     *)
8 (*  Copyright 2010-2013 Université Paris-Sud and Centre National de la *)
9 (*  Recherche Scientifique. All rights reserved.  This file is         *)
10 (*  distributed under the terms of the GNU Lesser General Public       *)
11 (*  License, with the special exception on linking described in file   *)
12 (*  ../LICENSE.                                                        *)
13 (*                                                                     *)
14 (***********************************************************************)
15
16
17 type node = Naive_tree.node
18 type cell = { node : node;
19               mutable next : cell }
20
21
22 type t = { mutable length : int;
23            mutable head : cell;
24            mutable last : cell; }
25
26 let rec nil = { node = Naive_tree.nil;
27                 next = nil }
28
29 let create () = { length = 0;
30                   head = nil;
31                   last = nil }
32
33 let iter f l =
34   let rec loop c =
35     if c != nil then begin
36       f c.node;
37       loop c.next
38     end
39   in
40   loop l.head
41
42
43 let length l = l.length
44
45
46 let add n l =
47   let ncell = { node = n;
48                 next = nil }
49   in
50   if l.last == nil then
51     { length = 1;
52       head = ncell;
53       last = ncell }
54   else
55     let () = l.last.next <- ncell in
56     { length = l.length + 1;
57       head = l.head;
58       last = ncell }