Files
mercury/tests/hard_coded/cqueue.m
Julien Fischer 459847a064 Move the univ, maybe, pair and unit types from std_util into their own
Estimated hours taken: 18
Branches: main

Move the univ, maybe, pair and unit types from std_util into their own
modules.  std_util still contains the general purpose higher-order programming
constructs.

library/std_util.m:
	Move univ, maybe, pair and unit (plus any other related types
	and procedures) into their own modules.

library/maybe.m:
	New module.  This contains the maybe and maybe_error types and
	the associated procedures.

library/pair.m:
	New module.  This contains the pair type and associated procedures.

library/unit.m:
	New module. This contains the types unit/0 and unit/1.

library/univ.m:
	New module. This contains the univ type and associated procedures.

library/library.m:
	Add the new modules.

library/private_builtin.m:
	Update the declaration of the type_ctor_info struct for univ.

runtime/mercury.h:
	Update the declaration for the type_ctor_info struct for univ.

runtime/mercury_mcpp.h:
runtime/mercury_hlc_types.h:
	Update the definition of MR_Univ.

runtime/mercury_init.h:
	Fix a comment: ML_type_name is now exported from type_desc.m.

compiler/mlds_to_il.m:
	Update the the name of the module that defines univs (which are
	handled specially by the il code generator.)

library/*.m:
compiler/*.m:
browser/*.m:
mdbcomp/*.m:
profiler/*.m:
deep_profiler/*.m:
	Conform to the above changes.  Import the new modules where they
	are needed; don't import std_util where it isn't needed.

	Fix formatting in lots of modules.  Delete duplicate module
	imports.

tests/*:
	Update the test suite to confrom to the above changes.
2006-03-29 08:09:58 +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, pair.
:- 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]
).