mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-17 18:33:58 +00:00
... and obsolete the globals structure in the I/O state.
library/io.m:
Move the implementations of the predicates that read and write bitmaps
to bitmap.m. Leave forward predicates in io.m, but mark them obsolete.
Mark the predicates that get, set and update the globals structure
stored in the I/O state as obsolete.
Export some functionality used by the moved code. The exports are
in the second, undocumented interface section.
Improve the names of some internal predicates.
Add some module qualifiers to reduce type ambiguities.
library/Mercury.options:
Disable obsolete warnings for io.m, to allow the initialization
of the I/O state to initialize the globals as well; the globals
are now marked obsolete, but they do still exist.
library/bitmap.m:
Move the predicates for reading and writing bitmaps here from io.m.
Add a "_range" suffix to the names of the predicates that read and write
a range in a bitmap. Without this, both read_bitmap and write_bitmap
existed with *four* arities. Now each of these predicates has only
two arities: one with an explicit stream, and one without.
Document a spot that may need double maintance.
Move the hash functions before the predicates that do I/O.
NEWS:
Announce the changes.
library/bit_buffer.read.m:
Document a spot that may need double maintance.
Fix some comments, and indentation.
profiler/globals.m:
Use a mutable to replace the system's only remaining use of
the globals structure in the I/O state.
Stop exporting a predicate used only locally.
Delete unneeded module qualifiers on predicate declarations and
clause heads.
217 lines
7.5 KiB
Mathematica
217 lines
7.5 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
% Copyright (C) 1995, 1997-1998, 2001, 2004-2006, 2011 The University of Melbourne.
|
|
% This file may only be copied under the terms of the GNU General
|
|
% Public License - see the file COPYING in the Mercury distribution.
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% File: globals.m.
|
|
% Main author: fjh.
|
|
%
|
|
% This module exports the `globals' type and associated access predicates.
|
|
% The globals type is used to collect together all the various data
|
|
% that would be global variables in an imperative language.
|
|
% This global data is stored in the io state.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module globals.
|
|
:- interface.
|
|
|
|
:- import_module options.
|
|
|
|
:- import_module bool.
|
|
:- import_module getopt.
|
|
:- import_module io.
|
|
:- import_module list.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- type globals.
|
|
|
|
:- type what_to_profile
|
|
---> memory_words
|
|
; memory_cells
|
|
; memory_snapshots
|
|
; user_plus_system_time
|
|
; user_time
|
|
; real_time.
|
|
|
|
:- pred what_to_profile(string, what_to_profile).
|
|
:- mode what_to_profile(in, out) is semidet.
|
|
:- mode what_to_profile(out, in) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% Access predicates for the `globals' structure.
|
|
%
|
|
|
|
:- pred get_what_to_profile(globals::in, what_to_profile::out) is det.
|
|
:- pred get_options(globals::in, option_table::out) is det.
|
|
|
|
:- pred set_what_to_profile(what_to_profile::in,
|
|
globals::in, globals::out) is det.
|
|
:- pred set_options(option_table::in, globals::in, globals::out) is det.
|
|
|
|
:- pred lookup_option(globals::in, option::in, option_data::out) is det.
|
|
|
|
:- pred lookup_bool_option(globals::in, option::in, bool::out) is det.
|
|
:- pred lookup_int_option(globals::in, option::in, int::out) is det.
|
|
:- pred lookup_string_option(globals::in, option::in, string::out) is det.
|
|
:- pred lookup_accumulating_option(globals::in, option::in,
|
|
list(string)::out) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
% Access predicates for storing a `globals' structure in the
|
|
% io using io.set_globals and io.get_globals.
|
|
|
|
:- pred io_init(option_table::in, io::di, io::uo) is det.
|
|
|
|
:- pred io_get_globals(globals::out, io::di, io::uo) is det.
|
|
|
|
:- pred io_set_globals(globals::in, io::di, io::uo) is det.
|
|
|
|
:- pred io_lookup_option(option::in, option_data::out, io::di, io::uo) is det.
|
|
|
|
:- pred io_set_option(option::in, option_data::in, io::di, io::uo) is det.
|
|
|
|
:- pred io_lookup_bool_option(option::in, bool::out, io::di, io::uo) is det.
|
|
:- pred io_lookup_int_option(option::in, int::out, io::di, io::uo) is det.
|
|
:- pred io_lookup_string_option(option::in, string::out,
|
|
io::di, io::uo) is det.
|
|
:- pred io_lookup_accumulating_option(option::in, list(string)::out,
|
|
io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module map.
|
|
:- import_module require.
|
|
:- import_module string.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
what_to_profile("memory-words", memory_words).
|
|
what_to_profile("memory-cells", memory_cells).
|
|
what_to_profile("snapshots", memory_snapshots).
|
|
what_to_profile("user-plus-system-time", user_plus_system_time).
|
|
what_to_profile("user-time", user_time).
|
|
what_to_profile("real-time", real_time).
|
|
|
|
:- type globals
|
|
---> globals(
|
|
what_to_profile :: what_to_profile,
|
|
option_table :: option_table
|
|
).
|
|
|
|
get_what_to_profile(Globals, Globals ^ what_to_profile).
|
|
get_options(Globals, Globals ^ option_table).
|
|
|
|
set_what_to_profile(WhatToProfile, !Globals) :-
|
|
!Globals ^ what_to_profile := WhatToProfile.
|
|
set_options(Options, !Globals) :-
|
|
!Globals ^ option_table := Options.
|
|
|
|
lookup_option(Globals, Option, OptionData) :-
|
|
globals.get_options(Globals, OptionTable),
|
|
map.lookup(OptionTable, Option, OptionData).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
lookup_bool_option(Globals, Option, Value) :-
|
|
globals.lookup_option(Globals, Option, OptionData),
|
|
( if OptionData = bool(Bool) then
|
|
Value = Bool
|
|
else
|
|
error("globals.lookup_bool_option: invalid bool option")
|
|
).
|
|
|
|
lookup_int_option(Globals, Option, Value) :-
|
|
globals.lookup_option(Globals, Option, OptionData),
|
|
( if OptionData = int(Int) then
|
|
Value = Int
|
|
else
|
|
error("globals.lookup_int_option: invalid int option")
|
|
).
|
|
|
|
lookup_string_option(Globals, Option, Value) :-
|
|
globals.lookup_option(Globals, Option, OptionData),
|
|
( if OptionData = string(String) then
|
|
Value = String
|
|
else
|
|
error("globals.lookup_string_option: invalid string option")
|
|
).
|
|
|
|
lookup_accumulating_option(Globals, Option, Value) :-
|
|
globals.lookup_option(Globals, Option, OptionData),
|
|
( if OptionData = accumulating(Accumulating) then
|
|
Value = Accumulating
|
|
else
|
|
error("globals.lookup_accumulating_option: " ++
|
|
"invalid accumulating option")
|
|
).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- mutable(profiler_globals, globals, init_profiler_globals, ground,
|
|
[untrailed, attach_to_io_state]).
|
|
|
|
:- func init_profiler_globals = globals.
|
|
|
|
init_profiler_globals = Globals :-
|
|
Globals = globals(user_plus_system_time, map.init).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
io_init(Options, !IO) :-
|
|
Globals = globals(user_plus_system_time, Options),
|
|
set_profiler_globals(Globals, !IO).
|
|
|
|
io_get_globals(Globals, !IO) :-
|
|
get_profiler_globals(Globals, !IO).
|
|
|
|
io_set_globals(Globals, !IO) :-
|
|
set_profiler_globals(Globals, !IO).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
io_lookup_option(Option, OptionData, !IO) :-
|
|
globals.io_get_globals(Globals, !IO),
|
|
globals.get_options(Globals, OptionTable),
|
|
map.lookup(OptionTable, Option, OptionData).
|
|
|
|
io_set_option(Option, OptionData, !IO) :-
|
|
globals.io_get_globals(Globals0, !IO),
|
|
globals.get_options(Globals0, OptionTable0),
|
|
map.set(Option, OptionData, OptionTable0, OptionTable),
|
|
globals.set_options(OptionTable, Globals0, Globals),
|
|
globals.io_set_globals(Globals, !IO).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
io_lookup_bool_option(Option, Value, !IO) :-
|
|
globals.io_get_globals(Globals, !IO),
|
|
globals.lookup_bool_option(Globals, Option, Value).
|
|
|
|
io_lookup_int_option(Option, Value, !IO) :-
|
|
globals.io_get_globals(Globals, !IO),
|
|
globals.lookup_int_option(Globals, Option, Value).
|
|
|
|
io_lookup_string_option(Option, Value, !IO) :-
|
|
globals.io_get_globals(Globals, !IO),
|
|
globals.lookup_string_option(Globals, Option, Value).
|
|
|
|
io_lookup_accumulating_option(Option, Value, !IO) :-
|
|
globals.io_get_globals(Globals, !IO),
|
|
globals.lookup_accumulating_option(Globals, Option, Value).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
:- end_module globals.
|
|
%---------------------------------------------------------------------------%
|