mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-19 15:54:18 +00:00
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.
77 lines
1.6 KiB
Mathematica
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]
|
|
).
|
|
|