+
Point of view
All features
deferred class INTERNALS
Summary
INTERNALS serves as a gateway between the typed ideal world of Eiffel objects and the untyped physical world of raw memory, files on disks, streams on networks...
All instances of INTERNALS must be of type TYPED_INTERNALS. Each INTERNALS object describes the physical structure of exactly one type. For instance, TYPED_INTERNALS[STRING] describes the physical structure of class STRING.
Optionally, an object of an INTERNAL's associated type can be attached to that INTERNAL. The INTERNAL can then be used to inspect and change the values of the attributes of the attached object. For instance, a STRING could be attached to a TYPED_INTERNALS[STRING]. The TYPED_INTERNALS[STRING] could then be used to get or set this STRING's attributes.
This class is meant as a very basic building block. Please read the following advice to use INTERNALS wisely:
  1. Don't use INTERNALS
  2. If rule 1 is inapplicable, use INTERNALS to build a higher-level abstraction, and use that abstraction in your application. You really don't want INTERNALS scattered around your application code.
Direct parents
Insert list: ANY
Known children
Inherit list: TYPED_INTERNALS
Overview
Features
Getting information about the described object's type
{INTERNALS_HANDLER, INTERNALS}
Getting information about the type's attributes
{INTERNALS_HANDLER}
Accessing the object
{INTERNALS_HANDLER}
Accessing the object's attributes
{INTERNALS_HANDLER}
type_generator: STRING
deferred function
Name of the base class of the type described by Current.
For instance, if Current is a TYPED_INTERNALS[ARRAY[INTEGER]], type_generator is "ARRAY".
type_generating_type: STRING
deferred function
Name of the type described by Current.
For instance, if Current is a TYPED_INTERNALS[ARRAY[INTEGER]], type_generating_type is "ARRAY[INTEGER]".
type_is_expanded: BOOLEAN
deferred function
Is the type described by Current expanded?
type_is_native_array: BOOLEAN
effective function
Is the type described by Current a NATIVE_ARRAY?
ensure
type_attribute_is_expanded (i: INTEGER_32): BOOLEAN
deferred function
Is the type of the ith attribute expanded?
require
type_can_be_assigned_to_attribute (other: INTERNALS, i: INTEGER_32): BOOLEAN
deferred function
Can the object attached to other be assigned to the ith attribute?
require ensure
type_attribute_count: INTEGER_32
deferred function
Number of attributes of the type described by Current
type_attribute_name (i: INTEGER_32): STRING
deferred function
Name of the ith attribute of the type described by Current.
require ensure
  • Result /= Void
type_attribute_generator (i: INTEGER_32): STRING
deferred function
Name of the base class of the ith attribute of the type described by Current.
require ensure
  • Result /= Void
type_attribute_generating_type (i: INTEGER_32): STRING
deferred function
Name of the type of the ith attribute of the type described by Current.
require ensure
  • Result /= Void
object_as_pointer: POINTER
deferred function
Pointer to the object currently attached to Current.
require ensure
  • Result.is_not_null
object_attribute (i: INTEGER_32): INTERNALS
deferred function
Read the ith attribute of the type described by Current (also see type_attribute).
If this attribute is attached to an object, then Result is also attached to that object
require ensure
set_object_attribute (element: INTERNALS, i: INTEGER_32)
deferred procedure
Write the ith attribute of the type described by Current
require ensure
object_can_be_retrieved: BOOLEAN
writable attribute
Can the object be retrieved by the rest of the system through object?
object_can_be_modified: BOOLEAN
effective function
Can the object be modified through set_object_attribute, i.e.
is it safely isolated from the rest of the system?
ensure
set_object_can_be_retrieved
deferred procedure
Forbid further modification of the object through set_object_attribute, so that it can safely be released into the system.
Note that the embedded object is notified via its internals_can_be_retrieved feature.
ensure