~npalix/coccinelle/upstream

« back to all changes in this revision

Viewing changes to bundles/stdcompat/stdcompat-8/stdcompat__queue.ml.in

  • Committer: Thierry Martinez
  • Date: 2019-08-20 13:37:04 UTC
  • Revision ID: git-v1:0214afad4a32c95349c2c5a38e37cea407c455d0
Update bundles

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
include Queue
2
 
 
3
 
@BEGIN_BEFORE_4_08_0@
4
 
let take_opt q =
5
 
  try Some (take q)
6
 
  with Empty -> raise Empty
7
 
 
8
 
let peek_opt q =
9
 
  try Some (peek q)
10
 
  with Empty -> raise Empty
11
 
@END_BEFORE_4_08_0@
12
 
 
13
 
@BEGIN_BEFORE_4_07_0@
14
 
@BEGIN_WITH_MAGIC@
15
 
@BEGIN_FROM_4_03_0@
16
 
type 'a cell =
17
 
  | Nil
18
 
  | Cons of { content: 'a; mutable next: 'a cell }
19
 
 
20
 
type 'a internal = {
21
 
  mutable length: int;
22
 
  mutable first: 'a cell;
23
 
  mutable last: 'a cell
24
 
}
25
 
 
26
 
let to_seq (q : 'a t) =
27
 
  let q : 'a internal = Obj.magic q in
28
 
  let rec aux c () = match c with
29
 
    | Nil -> Stdcompat__seq.Nil
30
 
    | Cons { content=x; next; } -> Stdcompat__seq.Cons (x, aux next)
31
 
  in
32
 
  aux q.first
33
 
@END_FROM_4_03_0@
34
 
@BEGIN_BEFORE_4_03_0@
35
 
type 'a cell = {
36
 
    content: 'a;
37
 
    mutable next: 'a cell
38
 
  }
39
 
 
40
 
type 'a internal = {
41
 
    mutable length: int;
42
 
    mutable tail: 'a cell
43
 
  }
44
 
 
45
 
let to_seq (q : 'a t) =
46
 
  let q : 'a internal = Obj.magic q in
47
 
  if q.length = 0 then
48
 
    Stdcompat__seq.empty
49
 
  else
50
 
    begin
51
 
      let tail = q.tail in
52
 
      let rec aux cell () =
53
 
        let tail' =
54
 
          if cell == tail then
55
 
            Stdcompat__seq.empty
56
 
          else
57
 
            aux cell.next in
58
 
        Stdcompat__seq.Cons (cell.content, tail') in
59
 
      aux tail.next
60
 
    end
61
 
@END_BEFORE_4_03_0@
62
 
@END_WITH_MAGIC@
63
 
@BEGIN_WITHOUT_MAGIC@
64
 
let to_list q =
65
 
  fold (fun accu content -> content :: accu) [] q
66
 
 
67
 
let to_seq q =
68
 
  Stdcompat__list.to_seq (List.rev (to_list q))
69
 
@END_WITHOUT_MAGIC@
70
 
 
71
 
let add_seq q i = Stdcompat__seq.iter (fun x -> push x q) i
72
 
 
73
 
let of_seq g =
74
 
  let q = create() in
75
 
  add_seq q g;
76
 
  q
77
 
@END_BEFORE_4_07_0@