Files
mercury/tests/hard_coded/cqueue.m
Fergus Henderson cffb6a601b New file. This is part of the eqv_type_bug test case,
Estimated hours taken: 0.25

tests/hard_coded/cqueue.m:
	New file.  This is part of the eqv_type_bug test case,
	which I forgot to add when I added eqv_type_bug.m.
1997-12-30 15:46:48 +00:00

77 lines
1.6 KiB
Mathematica

:- module cqueue.
:- interface.
:- type cqueue(T).
:- pred cqueue__cqueue(cqueue(T)).
:- mode cqueue__cqueue(out) is det.
:- pred cqueue__insert(cqueue(T), T, cqueue(T)).
:- mode cqueue__insert(in, in, out) is det.
:- pred cqueue__append(cqueue(T), T, cqueue(T)).
:- mode cqueue__append(in, in, out) is det.
:- pred cqueue__this(cqueue(T), T).
:- mode cqueue__this(in, out) is semidet.
:- pred cqueue__next(cqueue(T), cqueue(T)).
:- mode cqueue__next(in, out) is det.
:- pred cqueue__prev(cqueue(T), cqueue(T)).
:- mode cqueue__prev(in, out) is det.
:- implementation.
:- import_module list, std_util.
:- type cqueue(T) == pair(list(T)).
cqueue__cqueue([] - []).
cqueue__insert([Thing|Before] - After, New, [Thing,New|Before] - After).
cqueue__insert([] - After0, New, Before - After) :-
list__reverse(After0, Before0),
(
Before0 = [],
Before = [New],
After = []
;
Before0 = [Thing|Before1],
Before = [Thing, New|Before1],
After = []
).
cqueue__append(Before - After, New, Before - [New|After]).
cqueue__this([This|_Before] - _After, This).
cqueue__this([] - After, This) :-
list__reverse(After, [This|_Before]).
cqueue__next(Before - [Thing|After], [Thing|Before] - After).
cqueue__next(Before0 - [], Before - After) :-
list__reverse(Before0, After0),
(
After0 = [],
Before = [],
After = []
;
After0 = [Thing|After],
Before = [Thing]
).
cqueue__prev([Thing|Before] - After, Before - [Thing|After]).
cqueue__prev([] - After0, Before - After) :-
list__reverse(After0, Before0),
(
Before0 = [],
After = [],
Before = []
;
Before0 = [Thing|Before],
After = [Thing]
).