class interface PLATFORM
feature(s) from GENERAL
-- Access :
generating_type: STRING
-- Name of current object's generating type (type of
-- which it is a direct instance).
generator: STRING
-- Name of current object's generating class (base class
-- of the type of which it is a direct instance).
stripped (other: GENERAL): like other
-- Newly created object with fields copied from current object,
-- but limited to attributes of type of other.
require
conformance: conforms_to(other)
ensure
stripped_to_other: Result.same_type(other)
feature(s) from GENERAL
-- Status report :
conforms_to (other: GENERAL): BOOLEAN
-- Is dynamic type of Current a descendant of dynamic type of
-- other ?
--
-- Note: because of automatic conversion from expanded to reference
-- type when passing argument other, do not expect a correct
-- behavior with expanded types.
require
not is_expanded_type;
other_not_void: other /= Void
same_type (other: GENERAL): BOOLEAN
-- Is type of current object identical to type of other ?
require
not is_expanded_type;
other_not_void: other /= Void
ensure
definition: Result = (conforms_to(other) and other.conforms_to(Current))
feature(s) from GENERAL
-- Comparison :
equal (some: ANY; other: like some): BOOLEAN
-- Are some and other both Void or attached to
-- objects considered equal ?
ensure
definition: Result = (some = Void and other = Void) or else some /= Void and other /= Void and then some.is_equal(other)
is_equal (other: like Current): BOOLEAN
-- Is other attached to an object considered equal to
-- current object ?
require
other_not_void: other /= Void
ensure
consistent: standard_is_equal(other) implies Result;
symmetric: Result implies other.is_equal(Current)
standard_equal (some: ANY; other: like some): BOOLEAN
-- Are some and other both Void or attached to
-- field-by-field objects of the same type ?
-- Always use the default object comparison criterion.
ensure
definition: Result = (some = Void and other = Void) or else some /= Void and other /= Void and then some.standard_is_equal(other)
standard_is_equal (other: like Current): BOOLEAN
-- Are Current and other field-by-field identical?
require
other /= Void
ensure
symmetric: Result implies other.standard_is_equal(Current)
feature(s) from GENERAL
-- Deep Comparison :
deep_equal (some: ANY; other: like some): BOOLEAN
-- Are some and other either both Void or attached to
-- recursively isomorphic object structures ?
ensure
shallow_implies_deep: standard_equal(some,other) implies Result;
same_type: Result implies some.same_type(other);
symmetric: Result implies deep_equal(other,some)
feature(s) from GENERAL
-- Deep Comparison :
standard_deep_equal (some: ANY; other: like some): BOOLEAN
-- Are some and other either both Void or attached to
-- recursively isomorphic object structures ?
ensure
shallow_implies_deep: standard_equal(some,other) implies Result;
same_type: Result implies some.same_type(other);
symmetric: Result implies deep_equal(other,some)
is_deep_equal (other: like Current): BOOLEAN
-- Is Current recursively isomorph with other ?
require
other_not_void: other /= Void
ensure
symmetric: Result implies other.is_deep_equal(Current)
feature(s) from GENERAL
-- Duplication :
clone (other: ANY): like other
-- When argument other is Void, return Void
-- otherwise return other.twin.
ensure
equal: equal(Result,other)
twin: like Current
-- Return a new object with the dynamic type of Current.
-- Before being returned, the new object is initialized using
-- feature copy (Current is passed as the argument).
-- Thus, when feature copy of GENERAL is not redefined,
-- twin has exactly the same behaviour as standard_twin.
ensure
equal: Result.is_equal(Current)
copy (other: like Current)
-- Update current object using fields of object attached
-- to other, so as to yield equal objects.
require
other_not_void: other /= Void
ensure
is_equal: is_equal(other)
standard_clone (other: ANY): like other
-- Void if other is Void; otherwise new object
-- field-by-field identical to other.
-- Always use the default copying semantics.
ensure
equal: standard_equal(Result,other)
standard_twin: like Current
-- Return a new object with the dynamic type of Current.
-- Before being returned, the new object is initialized using
-- feature standard_copy (Current is passed as the argument).
standard_copy (other: like Current)
-- Copy every field of other onto corresponding field of
-- current object.
require
other_not_void: other /= Void
ensure
standard_is_equal(other)
feature(s) from GENERAL
-- Deep Duplication :
deep_clone (other: GENERAL): like other
-- Void if other is Void: otherwise, new object structure
-- recursively duplicated from the one attached to other.
ensure
deep_equal: deep_equal(other,Result)
feature(s) from GENERAL
-- Basic operations :
default: like Current
-- Default value of current type.
default_pointer: POINTER
-- Default value of type POINTER (avoid the need to
-- write p.default for some p of type POINTER).
ensure
Result = Result.default
default_rescue
-- Handle exception if no Rescue clause.
-- (Default: do nothing.)
do_nothing
-- Execute a null action.
feature(s) from GENERAL
-- Input and Output :
io: STD_INPUT_OUTPUT
-- Handle to standard file setup.
-- To use the standard input/output file.
-- Has type STD_FILES in ELKS 95.
ensure
Result /= Void
std_input: STD_INPUT
-- To use the standard input file.
std_output: STD_OUTPUT
-- To use the standard output file.
std_error: STD_ERROR
-- To use the standard error file.
feature(s) from GENERAL
-- Object Printing :
print (some: GENERAL)
-- Write terse external representation of some on
-- standard_output.
-- To customize printing, one may redefine
-- fill_tagged_out_memory or out_in_tagged_out_memory (see
-- for example how it works in class COLLECTION).
-- Not frozen in ELKS 95.
print_on (file: OUTPUT_STREAM)
-- Default printing of current object on a file.
-- One may redefine fill_tagged_out_memory or
-- out_in_tagged_out_memory to adapt the behavior of
-- print_on.
--
tagged_out: STRING
-- New string containing printable representation of current
-- object, each field preceded by its attribute name, a
-- colon and a space.
out: STRING
-- Create a new string containing terse printable
-- representation of current object.
out_in_tagged_out_memory
-- Append terse printable represention of current object
-- in tagged_out_memory.
tagged_out_memory: STRING
fill_tagged_out_memory
-- Append a viewable information in tagged_out_memory in
-- order to affect the behavior of out, tagged_out, etc.
feature(s) from GENERAL
-- Basic named file handling :
file_tools: FILE_TOOLS
file_exists (path: STRING): BOOLEAN
-- True if path is an existing readable file.
require
path /= Void
remove_file (path: STRING)
require
path /= Void
rename_file (old_path, new_path: STRING)
require
old_path /= Void;
new_path /= Void
feature(s) from GENERAL
-- Access to command-line arguments :
argument_count: INTEGER
-- Number of arguments given to command that started
-- system execution (command name does not count).
ensure
Result >= 0
argument (i: INTEGER): STRING
-- i th argument of command that started system execution
-- Gives the command name if i is 0.
require
i >= 0;
i <= argument_count
ensure
Result /= Void
command_arguments: FIXED_ARRAY[STRING]
-- Give acces to arguments command line including the
-- command name at index 0.
ensure
not Result.empty
get_environment_variable (name: STRING): STRING
-- To get the value of a system environment variable
-- (like "PATH" on Unix for example).
-- Gives Void when system variable name is undefined.
require
name /= Void
feature(s) from GENERAL
-- System calls and crashs :
crash
-- Print Run Time Stack and then exit with exit_failure_code.
trace_switch (flag: BOOLEAN)
-- May be used in combination with option "-trace" of
-- command compile_to_c (see compile_to_c.hlp for
-- details).
system (system_command_line: STRING)
-- To execute a system_command_line as for example, "ls -l" on UNIX.
die_with_code (code: INTEGER)
-- Terminate execution with exit status code code.
-- Do not print any message.
-- Note: you can use predefined exit_success_code or
-- exit_failure_code as well as another code you need.
exit_success_code: INTEGER
exit_failure_code: INTEGER
feature(s) from GENERAL
-- Maths constants :
Pi: DOUBLE
Evalue: DOUBLE
Deg: DOUBLE
-- Degrees/Radian
Phi: DOUBLE
-- Golden Ratio
feature(s) from GENERAL
-- Character names :
Ctrl_a: CHARACTER
Ctrl_b: CHARACTER
Ctrl_c: CHARACTER
Ctrl_d: CHARACTER
Ctrl_e: CHARACTER
Ctrl_f: CHARACTER
Ctrl_g: CHARACTER
Ch_bs: CHARACTER
Ch_tab: CHARACTER
Ctrl_j: CHARACTER
Ctrl_k: CHARACTER
Ctrl_l: CHARACTER
Ctrl_m: CHARACTER
Ctrl_n: CHARACTER
Ctrl_o: CHARACTER
Ctrl_p: CHARACTER
Ctrl_q: CHARACTER
Ctrl_r: CHARACTER
Ctrl_s: CHARACTER
Ctrl_t: CHARACTER
Ctrl_u: CHARACTER
Ctrl_v: CHARACTER
Ctrl_w: CHARACTER
Ctrl_x: CHARACTER
Ctrl_y: CHARACTER
Ctrl_z: CHARACTER
Ch_del: CHARACTER
feature(s) from GENERAL
-- Should not exist :
not_yet_implemented
feature(s) from GENERAL
-- For ELS Compatibility :
id_object (id: INTEGER): ANY
-- Object for which object_id has returned id;
-- Void if none.
require
id /= 0
object_id: INTEGER
-- Value identifying current reference object.
require
not is_expanded_type
feature(s) from GENERAL
-- The Guru section :
to_pointer: POINTER
-- Explicit conversion of a reference into POINTER type.
require
not is_expanded_type
is_expanded_type: BOOLEAN
-- Target is not evaluated (Statically computed).
-- Result is true if target static type is an expanded type.
-- Useful for formal generic type.
is_basic_expanded_type: BOOLEAN
-- Target is not evaluated (Statically computed).
-- Result is true if target static type is one of the
-- following types: BOOLEAN, CHARACTER, INTEGER, REAL,
-- DOUBLE or POINTER.
ensure
Result implies is_expanded_type
object_size: INTEGER
-- Gives the size of the current object at first level
-- only (pointed-to sub-object are not concerned).
-- The result is given in number of CHARACTER.
feature(s) from GENERAL
-- Implementation of GENERAL (do not use directly) :
se_assigned_from (other: GENERAL): BOOLEAN
-- To implement conforms_to (must only be called inside
-- conforms_to because of VJRV rule).
require
not is_expanded_type
feature(s) from PLATFORM
-- Maximum :
Maximum_character_code: INTEGER
-- Largest supported code for CHARACTER values.
ensure
meaningful: Result >= 127
Maximum_integer: INTEGER
-- Largest supported value of type INTEGER.
ensure
meaningful: Result >= 0
Maximum_real: REAL
-- Largest supported value of type REAL.
ensure
meaningful: Result >= 0.0
Maximum_double: DOUBLE
-- Largest supported value of type DOUBLE.
ensure
meaningful: Result >= Maximum_real
feature(s) from PLATFORM
-- Minimum :
Minimum_character_code: INTEGER
-- Smallest supported code for CHARACTER values.
ensure
meaningful: Result <= 0
Minimum_integer: INTEGER
-- Smallest supported value of type INTEGER.
ensure
meaningful: Result <= 0
Minimum_double: DOUBLE
-- Smallest supported value of type DOUBLE.
ensure
meaningful: Result <= 0.0
Minimum_real: REAL
-- Smallest supported value of type REAL.
ensure
meaningful: Result <= 0.0
feature(s) from PLATFORM
-- Bits :
Boolean_bits: INTEGER
-- Number of bits in a value of type BOOLEAN.
ensure
meaningful: Result >= 1
Character_bits: INTEGER
-- Number of bits in a value of type CHARACTER.
ensure
meaningful: Result >= 1;
large_enough: 2 ^ Result >= Maximum_character_code
Integer_bits: INTEGER
-- Number of bits in a value of type INTEGER.
ensure
meaningful: Result >= 1
Real_bits: INTEGER
-- Number of bits in a value of type REAL.
ensure
meaningful: Result >= 1
Double_bits: INTEGER
-- Number of bits in a value of type DOUBLE.
ensure
meaningful: Result >= 1;
meaningful: Result >= Real_bits
Pointer_bits: INTEGER
-- Number of bits in a value of type POINTER.
end of PLATFORM