11. Anlage
 
zurück
11.10 Sprachdefinierte Attribute (Anlage K)


Diese Anlage enthält eine Zusammenfassung der im Referenzhandbuch der Sprache definierten Attribute. P'Access
Für ein Präfix P, das ein Unterprogramm bezeichnet, ergibt dieses Attribut einen Zugriffswert, der das von P bezeichnete Unterprogramm bestimmt. Der Typ von P'Access ist ein dem erwarteten Typ entsprechender Unterprogramm-Zugriffstyp.


X'Access
Für ein Präfix X, das eine Alias-Kennzeichnung eines Objekts bezeichnet, ergibt dieses Attribut einen Zugriffswert der das von X bezeichnete Objekt bestimmt. Der Typ von X'Access ist ein dem erwarteten Typ entsprechender Objekt-Zugriffstyp. Der erwartete Typ sei ein allgemeiner Zugriffstyp.


X'Address
Das Attribut "Address" bezeichnet die Adresse des ersten Speicherelementes das X zugewiesen wurde, wobei das Präfix X für ein Objekt, eine Programmeinheit oder eine Marke stehen kann. Bei einer Programmeinheit oder einer Marke bezieht sich dieser Wert auf den Maschinencode, welcher dem Rumpf oder der Anweisung zugeordnet ist. Der Wert dieses Attributs ist vom Typ System.Address.


S'Adjacent
Dieses Attribut ist eine Funktion mit folgender Spezifikation:

function S'Adjacent( X, Towards : gleitpunkt_typ )
return gleitpunkt_typ

Für jeden Untertyp S eines Gleitpunkttyps liefert diese Funktion die am dichtesten an "X" liegende Maschinenzahl mit der Eigenschaft, daß sie sich zwischen "X" und "Towards" befindet. Ist "X" gleich "Towards", dann wird "X" zurückgegeben. Falls das Ergebnis außerhalb des Untertyps S liegt, wird die Ausnahme Constraint_Error ausgelöst.
Falls das Attribut "gleitpunkt_typ'Signed_Zeros" den Rückgabewert "Wahr" ergibt und das Ergebnis von "Adjacent" null ist, so erhält dieses Ergebnis das Vorzeichen von "X". Hat "Towards" den Wert null, so hat sein Vorzeichen keinen Einfluß auf das Ergebnis von "Adjacent".

Es gelten folgende Identitäten:
gleitpunkt_typ'Pred( X ) = gleittpunkt_typ'Adjacent( X, Towards ), falls X > Towards und
gleitpunkt_typ'Succ( X ) = gleittpunkt_typ'Adjacent( X, Towards ), falls X < Towards

Beispiel:
Der Wert des Bruches "1/3" ist binär nicht darstellbar. Mit dem Attribut "Adjacent" kann
bestimmt werden, ob die Zahl, die als Näherung für "1/3" dienen soll,
unterhalb float'Adjacent( X => 1.0 / 3.0, Towards => 0.0 ) oder
oberhalb float'Adjacent( X => 1.0 / 3.0, Towards => 1.0 )
von "1/3" liegen soll.

Anmerkung:
Folgende drei Werte stehen nicht zwangsläufig in einem bestimmten Verhältnis.

x : float := float'Adjacent( 1.0 / 3.0, 0.0 ); -- unterhalb
y : float := float'Adjacent( 1.0 / 3.0, 1.0 ); -- oberhalb
z : float := 1.0 / 3.0;

Zwar gilt, daß "x" echt kleiner "y" ist, aber in welchem Verhältnis "z" zu "x" oder "y" steht, ist ungewiß. Es wird nicht garantiert, daß entweder "z" identisch zu "x" oder zu "y" ist. Sicher ist nur, daß "z" irgendwo zwischen "x" und "y" liegt. Das folgt daraus, daß "x" und "y" sicher Maschinenzahlen sind, aber das "z" eine Maschinenzahl ist wird nirgends gefordert. Wird "z" z. B. in einem Register gehalten, so kann die Genauigkeit von "z" größer sein, als die der Maschinenzahlen, und damit "z" dichter an dem exakten Wert des Bruches "1/3" liegen als "x" und "y".


S'Aft
Ergibt die Anzahl von Dezimalstellen die nach dem Dezimalpunkt benötigt werden um das Delta eines Festpunkt-Untertyps S aufzunehmen, ausgenommen das Delta ist größer als 0.1, dann ergibt das Attribut den Wert eins. (S'Aft ist die kleinste positive Ganzzahl N für die (10**N)*S'Delta größer oder gleich eins ist.) Der Wert dieses Attributs ist vom Typ universal_integer.


X'Alignment
Das Attribut "Alignment" gibt an, nach welchen Speicherplatzgrenzen Objekte eines Typs ausgerichtet werden oder ein Objekt ausgerichtet ist.
Es gilt die Identität:
X'Address mod X'Alignment = 0.

Beispiel:
declare
   x : integer := 0;
begin
   Text_Io.Put_Line( integer'image( integer'Alignment ) );
   Text_Io.Put_Line( integer'image( x'Alignment ) );
end;

Die mögliche Ausrichtung eines Typs hängt von dem Speicherplatz ab, der benötigt wird um Objekte des Typs anzulegen.

Beispiel:
type a_int is range 0 .. 15;
type b_int is range 0 .. 1_000_000_000;

-- Im folgenden werden zwei Darstellungsklauseln
-- für die Typen "a_int" und "b_int" angeben.

for a_int'Alignment use 2; -- Übersetzbar
for b_int'Alignment use 2; -- Nicht übersetzbar


Der Übersetzer gibt mit der Fehlermeldung eine minimale Größe für die Ausrichtung an, z. B. auf einem PC den Wert 4. Für den Typ "b_int" werden mindestens 32 Bit benötigt, also 4 Byte mit je 8 Bit. Eine Ausrichtung von 2 würde bedeuten, daß der Ganzzahltyp "b_int" auf einem PC über eine Wortgrenze hinweg abgespeichert werden müßte. Das wäre für einen Zahltyp sehr ineffizient.
Wird für ein Objekt die Ausrichtung null angegeben, so gilt entweder, daß das Objekt nicht durch das Laufzeitsystem alloziert wurde oder daß das Objekt mittels unchecked_conversion entstanden ist. Objekte, die nicht vom Laufzeitsystem alloziert wurden, sind solche, die (z. B. aus in anderen Sprachen entwickelten Programmteilen) importiert wurden oder durch benutzerdefinierte Allokatoren entstanden sind.


S'Base
Für jeden skalaren Untertyp S bezeichnet dieses Attribut einen uneingeschränkten Untertyp des Typs von S. Dieser uneingeschränkte Untertyp wird als Basis-Untertyp des Typs bezeichnet.


S'Bit_Order
Für jeden spezifischen Verbund-Untertyp S bezeichnet dieses Attribut die Bitreihenfolge für den Typ von S. Der Wert dieses Attributs ist vom Typ System.Bit_Order.


P’Body_Version
Das Attribut "Version" ergibt eine Versions"nummer" für den Rumpf einer Programmeinheit. Der Typ des Rückgabewerts ist vom Typ String. Siehe auch das Attribut "Version" für den Deklarationsteil.
Wird die Versionsnummer zu dem Rumpf einer Programmeinheit ausgegeben, danach der Rumpf verändert, übersetzt und von neuem die Versionsnummer ausgegeben, so unterscheiden sich beide Versionsnummern. Allerdings ist nicht gesichert, daß an diesen Nummern abgelesen werden kann, welche der beiden Rümpfe der jüngere bzw. ältere ist.
Dieses Attribut steht im Zusammenhang mit verteilten Systemen. Ein Ada-Programm, das über mehrere Partitionen verteilt ist, kann mit diesem Attribut feststellen, ob die Konfiguration so vorliegt, wie vorher festgelegt.

Beispiel:
with Ada.Text_Io;

procedure p is
   version : string := Ada.Text_Io'Body_Version;
begin
   Ada.Text_Io.Put_Line( version );
end p;


T'Callable
Das Attribut "Callable" ist vom Typ "Boolean" und liefert den Wert "Wahr", wenn der Prozeß T mittels eines ingangsaufrufes aufrufbar ist, und liefert den Wert "Falsch", wenn der Prozeß T nicht mehr mittels eines Eingangsaufrufes aufrufbar ist.
Ein Prozeß ist genau dann nicht mehr aufrufbar, wenn sein Zustand ausgeführt, beendet oder anormal ist (siehe Zustände von Prozessen).

Beispiel:
-- ...
if prozess'callable then
   text_io.put_line( "aufrufbar" );
else
   text_io.put_line( "nicht aufrufbar" );
end if;
-- ...


E'Caller
Das Attribut "Caller" liefert die vom Laufzeitsystem verwendete eindeutige Bezeichnung eines Prozesses. Das Attribut "Caller" kann nur in einer Annahmeanweisung oder im Rumpf eines Einganges einer geschützten Einheit verwendet werden. Diese Bezeichnung ist vom privaten Typ Task_ID aus dem Paket "Ada.Task_Identification". Siehe auch das
Attribut T'Identity.

Beispiel:
-- Dieses Programm definiert einen Prozeßtyp mit,
-- dem Eingang "Start", legt einen Prozeß von diesem Typ an
-- und gibt aus dem Rumpf der zu diesem Eingang
-- korrespondierenden Annahmeanweisung die vom Laufzeit-
-- system vergebenen Bezeichnung des Prozesses aus, der
-- diesen Eingang aufgerufen hat. Der Eingang wird vom
-- Hauptprogramm dreimal aufgerufen.
-- Diese Bezeichnung wird mit Hilfe der Funktion
-- "Image" aus dem Paket "Ada.Task_Identification"
-- in eine Zeichenkette umgewandelt.
--
with Text_Io;
with Ada.Task_Identification;

procedure identität is
   task type prozeß is
      entry start;
   end prozeß;

   task body prozeß is
      prozess_id : Ada.Task_Identification.Task_Id;
   begin
      for i in 1 .. 3 loop
         accept start do
            -- Verwendung des
            prozess_id := input'caller; -- Attributes
            --
            text_Io.Put_Line( Ada.Task_Identification.Image( prozess_id ) );
          end start;
      end loop;
   end prozeß;

   ein_prozess : prozeß;

begin
   for i in 1 .. 3 loop
      ein_prozess.input;
   end loop;
end identität;

S'Ceiling
Das Attribut "Ceiling" eines Gleitpunkt-Untertyps S entspricht der Funktion Ceiling(X).
Diese ergibt den kleinsten ganzzahligen Wert größer oder gleich X und stellt somit eine Rundung nach oben dar.
So gilt z.B. float'Ceiling(1.2) = 2.0 und float'Ceiling(-1.8) = -1.0.
Wenn X = 0 erhält das Ergebnis das Vorzeichen von X; ein Ergebnis gleich null erhält ansonsten ein negatives Vorzeichen falls S'Signed_Zeros "wahr" ist.
Siehe hierzu auch S'Floor und S'Truncation.

Beispiel:
procedure aufrunden is
   x, y : float;
begin
   -- Es wird immer nach oben gerundet:
   x := 1.2;
   y := float'Ceiling(x); -- y = 2.0

   -- Für negative Zahlen bedeutet "nach oben" zur Null hin!
   x := -1.8;
   y := float'Ceiling(x); -- y = -1.0

   if float'Signed_Zeros then
      -- Die Null kann hier vorzeichenbehaftet sein!
      x := -0.5;
      y := float'Ceiling(x); -- y = -0.0

      -- Nur wenn der Wert null ein Vorzeichen haben kann
      -- gibt es diese Unterscheidung:
      x := 0.0;
      y := float'Ceiling(x); -- y = 0.0
      x := -0.0;
      y := float'Ceiling(x); -- y = -0.0
   else
      -- Hier gibt es nur eine Null
      x := -0.5;
      y := float'Ceiling(x); -- y = 0.0
   end if;
end aufrunden;

S'Class
Das Attribut S'Class kennzeichnet die klassenweiten Typen. Diese sind spezielle erweiterbare Typen, die Objekte eines Unterbaums einer Klassenhierarchie aufnehmen können. Bei Verwendung des Attributs darf ein Objekt verschiedenen Objekten einer Klassenhierarchie zugeordnet werden. Einem Objekt einer Klassenhierarchie wird zur Laufzeit selbständig das zugehörige Unterprogramm zugeordnet.

Beispiel zur "klassenweiten Programmierung":
   K : Rechteck; -- von Grafikobjekt abgeleitet und mit eigener
   R : Kreis; -- Prozedur "Zeichne" zum Zeichnen versehen

   procedure Zeichne_Objekte ( X: Grafikobjekt'Class ) is
   begin
      -- ruft selbständig das zugehörige Unterprogramm zum Zeichnen auf.
      Zeichne ( X );
   end;
...
   Zeichne_Objekte (K); -- Übergabe von beliebigen Objekten der
   Zeichne_Objekte (R); -- Klassenhierarchie an "Zeichne_Objekte".

Auf jeden Untertyp S eines nicht erweiterbaren privaten Typs, dessen volle Sichtweise erweiterbar ist, ist S'Class ebenfalls anwendbar.

X'Component_Size
Das Attribut "Component_Size" bezeichnet für einen Reihungs-Untertyp oder ein Reihungsobjekt X die Größe der Komponenten vom Typ X in Bit. Der Wert dieses Attributs ist vom Typ universal_integer.

S'Compose
Für jeden Untertyp S eines Gleitpunkt-Typs T bezeichnet S'Compose eine Funktion mit der folgenden Spezifikation:

function S'Compose (Fraction : T;
Exponent : universal_integer)
return T

Sei v der Wert Fraction*T'Machine_Radix**(Exponent-k), wobei k den normalisierten Exponenten von Fraction darstellt. Falls v eine Maschinenzahl vom Typ T ist, oder falls |v|>=T'Model_Small, ergibt die Funktion v; ansonsten ergibt sie eine der Maschinenzahlen vom Typ T die v am nächsten liegen.
Es wird Constraint_Error ausgelöst, falls v außerhalb Basisbereichs von S liegt.
Wenn S'Signed_Zeros "wahr" ist erhält ein Ergebnis gleich null das Vorzeichen von Fraction.

A'Constrained
Für ein Präfix A eines Diskriminanten-Typs ergibt dieses Attribut den Wert "wahr" falls A eine Konstante, einen Wert, oder eine eingeschränkte Variable bezeichnet, ansonsten den Wert "falsch".

Beispiel:
declare
   x : constant integer := 100;
begin
   if x'Constrained then
      put_line("x ist eine Konstante!");
   else
      null; -- wird nie ausgeführt
   end if;
end;

S'Copy_Sign
Das Attribut "Copy_Sign" bezeichnet eine Funktion mit zwei Parametern, Value und Sign,
eines Gleitpunkt-Untertyps S. Das Ergebnis verknüpft den Absolutwert von Value mit dem Vorzeichen von Sign. Ein Wert gleich null erhält nur dann das Vorzeichen von Sign wenn S'Signed_Zeros "wahr" ist.

Beispiel:
procedure vorzeichen is
   x, y, z : float;
begin
   x := 2.3;
   y := -1.7;
   z := float'Copy_Sign(x,y); -- z = -2.3
   z := float'Copy_Sign(y,x); -- z = 1.7
   x := 0.0;
   if float'Signed_Zeros then
      z := float'Copy_Sign(x,y); -- z = -0.0
   else
      z := float'Copy_Sign(x,y); -- z = 0.0
   end if;
end vorzeichen;

E'Count
Das Attribut "Count" kann nur innerhalb eines Einganges E eines Prozesses oder einer geschützten Einheit (Geschützte Typen) verwendet werden und liefert die Anzahl vor dem Eingang E wartender Aufrufe. Der Typ des Rückgabewertes ist universal_integer.

Beispiel:
task body Prozeß is
begin
   loop -- Diese Schleife wird nicht abgebrochen bis " Eingang" aufgerufen wird.
      exit when output'count > 0; -- Abbruchbedingung.
      delay 0.05; -- Irgendeine Aktion.
   end loop;
   accept Eingang do
      delay 0.01; -- Irgendeine Aktion
   end output;

end Prozeß;

S'Definite
Das Attribut "Definite" gibt "wahr" zurück, falls der Typ "S" ein definierter Typ ist, andernfalls "falsch". Nicht definierte Typen sind unbeschränkte Reihungstypen, Typen mit Diskriminanten ohne Voreinstellung und Typen mit unbekannter Diskriminante.

Beispiel:
   -- ...
   type index is range 1 .. 100; -- Definiert
   -- Nicht definiert, da unbeschränkter Reihungstyp.
   type reihung is array( index range <> ) of integer;

   -- Definiert, da die Diskriminante vorbesetzt ist.
   -- type mit_diskri( d : index := 50 ) is -- Definiert.

   -- Nicht definiert, da die Diskriminante nicht vorbesetzt ist.
   type mit_diskri( d : index ) is record
      i : integer;
   end record;

   package paket is
      -- Nicht definiert, da die Diskriminante unbekannt ist.
      type unbekannt( <> ) is limited private;
   private
      type mit_diskri( d : index ) is record
         i : integer;
      end record;
   end paket;

begin
   if paket.unbekannt'Definite then
      Text_Io.Put_Line( "ist definiert" );
   else
      Text_Io.Put_Line( "ist nicht definiert" );
   end if;
end;

Zu allen drei Typen "reihung", "mit_diskri" und "paket.unbekannt" liefert die Abfrage mit dem Attribut "Definite" das Ergebnis "ist nicht definiert".


S'Delta
Für jeden Festpunkt-Untertyp S bezeichnet das Attribut S'Delta das Delta des Typs.
Der Wert dieses Attributs ist vom Typ universal_real.


S'Denorm
Das Attribut "Denorm" gilt für jeden Untertyp S eines Gleitpunkt-Typs T und ergibt den Wert "wahr", falls jeder Wert der in der Form

+/-mantissa*T'Machine_Radix**T'Machine_Emin

ausgedrückt werden kann eine Maschinenzahl vom Typ T ist; ansonsten ergibt es den Wert "falsch". Hierbei ist mantissa ein Bruch ungleich Null mit T’Machine_Mantissa Stellen der Basis T’Machine_Radix, dessen erste Ziffer Null ist.
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Digits
Für jeden dezimalen Festpunkt-Untertyp S bezeichnet das Attribut S'Digits die Anzahl Stellen des dezimalen Festpunkt-Untertyps S, welche der Anzahl von Dezimalstellen entspricht, die in Objekten des Untertyps dargestellt werden können.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Digits
Für jeden Gleitpunkt-Untertyp S bezeichnet das Attribut S'Digits die angeforderte dezimale Genauigkeit für den Untertyp S.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Exponent
Für jeden Untertyp S eines Gleitpunkt-Typs T bezeichnet das Attribut S'Exponent eine Funktion mit der folgenden Spezifikation:

function S'Exponent (X : T)
return universal_integer

Die Funktion ergibt den normalisierten Exponenten von X.


S'External_Tag
Dieses Attribut liefert zu einem erweiterbaren Typ T eine externe Zeichenketten-Darstellung für T'Tag vom vordefinierten Typ String. Die Darstellung der externen Kennung ist implementierungsabhängig. Das Attribut ermöglicht eine lesbare Ausgabe des Tags und wird z. B. bei Ausgaben von Objekten erweiterbaren Typs auf Streams genutzt, um eine spätere Identifizierung zu ermöglichen.


A'First(N)
Das Attribut A'First(N) bezeichnet die untere Grenze des N-ten Indexbereichs eines Reihungstyps A; sein Typ ist der entsprechende Indextyp.
Siehe auch A'Last(N) und A'Length(N).

Beispiel:
declare
   subtype bereich1 is integer range 5..10;
   subtype bereich2 is integer range 20..30;
   type reihung is array (bereich1, bereich2) of integer;
   x : integer;
begin
   x := reihung'First(1); -- = 5 vom Typ bereich1
   x := reihung'First(2); -- = 20 vom Typ bereich2
end;


A'First
Das Attribut A'First bezeichnet die untere Grenze des ersten Indexbereichs eines Reihungstyps A; sein Typ ist der entsprechende Indextyp.
Siehe auch A'Last und A'Length.

Beispiel:
declare
   subtype bereich is integer range 1..26;
   type reihung is array (bereich) of character;

   beispiel : reihung;

begin
   beispiel(reihung'First) := ‘A’;
   -- weist dem Element beispiel(1) den Wert ‘A’ zu.
end;



S'First
Das Attribut S'First bezeichnet die untere Grenze des Bereichs eines skalaren Untertyps S. Der Wert des Attributs hat denselben Typ wie S. Siehe auch S'Last.

Beispiel:
Es gibt in Ada zwei vordefinierte ganzzahlige Untertypen: Natural stellt die natürlichen Zahlen inklusive null dar, es gilt daher Natural'First = 0; Positive stellt die positiven Zahlen dar (ohne null) und es gilt Positive'First = 1.


R.C'First_Bit
Liefert für eine Komponente C eines Verbundtyps R den Offset vom Anfang des ersten Speicherelementes, das von C belegt wird, bis zum ersten Bit, das von Komponente C belegt wird. Der Offset wird in Bit angegeben, wobei das erste Bit eines Speicherelementes mit 0 numeriert ist. Dieses Attribut liefert einen Wert des Typs universal_integer.


S'Floor
Für jeden Untertyp S eines Gleitpunkt-Typs T ergibt die Funktion Floor(X) den größten ganzzahligen Wert kleiner oder gleich X, rundet somit also immer nach unten.
Wenn X = 0 erhält das Ergebnis das Vorzeichen von X; ein Ergebnis von null hat ansonsten ein positives Vorzeichen.
Siehe hierzu auch S'Ceiling und S'Truncation.

Beispiel:
procedure abrunden is
   x, y : float;
begin
   -- Es wird immer nach unten gerundet:
   x := 1.2;
   y := float'Floor(x); -- y = 1.0
   -- Für negative Zahlen bedeutet "nach unten" von der Null weg!
   x := -1.2;
   y := float'Floor(x); -- y = -2.0
   x := 0.5;
   y := float'Floor(x); -- y = 0.0

   if float'Signed_Zeros then
      -- Hier gibt es die Null mit Vorzeichen
      x := -0.0;
      y := float'Floor(x); -- y = -0.0
  end if;
end abrunden;

S'Fore
Für jeden Festpunkt-Untertyp S:
S'Fore ergibt die Mindestanzahl Zeichen die für eine dezimale Darstellung eines beliebigen Wertes des Untertyps S vor dem Dezimalpunkt benötigt werden, unter der Annahme, daß diese Darstellung zwar keinen Exponenten enthält, dafür aber ein einzelnes Zeichen als Präfix hat, welches entweder ein Minuszeichen oder ein Leerzeichen ist.
(Diese Mindestanzahl enthält keine überflüssigen Nullen oder Unterstriche und beträgt mindestens 2.) Der Wert dieses Attributs ist vom Typ universal_integer.


S'Fraction
Für jeden Untertyp S eines Gleitpunkt-Typs T bezeichnet S'Fraction eine Funktion mit der folgenden Spezifikation:

function S'Fraction (X : T)
return T

Die Funktion ergibt den Wert X*T'Machine_Radix**(-k), wobei k der normalisierte Exponent von X ist. Ein Ergebnis von null, welches nur dann auftreten kann wenn X gleich null ist, erhält das Vorzeichen von X.


E'Identity
Die Ausnahmeidentität einer beliebigen Ausnahme wird mittels des Attributs "Identity" bestimmt. Der Typ dieses Attributs ist "Exception_Id". Man kann die Ausnahmeidentität z. B. zur Ausgabe mittels "Exception_Name" in einem Ausnahmebehandler nutzen, wobei der vollständige Name der Ausnahme in Großbuchstaben (inkl. Paketname) ausgegeben wird.

Beispiel:

Die Anweisung:

Put_Line (Exception_Name (Data_Error'Identity));

erzeugt die Ausgabe:

"ADA.IO_EXCEPTIONS.DATA_ERROR"


T'Identity
Das Attribut "Identity" liefert für einen Prozeß T eine vom Laufzeitsystem vergebene eindeutige Bezeichnung. Diese Bezeichnung ist vom privaten Typ Task_ID aus dem Paket "Ada.Task_Identification". Siehe auch das Attribut E'Caller.

Beispiel:
-- Dieses Programm definiert einen Prozeßtyp,
-- legt einen Prozeß von diesem Typ an und
-- gibt dreimal die vom Laufzeitsystem vergebene
-- Bezeichnung aus.
-- Diese Bezeichnung wird mit Hilfe der Funktion
-- "Image" aus dem Paket "Ada.Task_Identification"
-- in eine Zeichenkette umgewandelt.
--
with Text_Io;
with Ada.Task_Identification;

procedure identität is
   task type prozeß;

   task body prozeß is
   begin
      -- Der Prozeß wartet dreimal je eine Sekunde.
      --
      for i in 1 .. 3 loop
         delay 1.0;
      end loop;
   end prozeß;

   ein_prozeß : prozeß;
   prozeß_id : Ada.Task_Identification.Task_id;

begin
   -- Diese Prozedur wartet dreimal je eine Sekunde,
   -- fragt dann die Prozeßidentität ab und gibt diese
   -- als Zeichenkette auf den Bildschirm aus.

   for i in 1 .. 3 loop
      delay 1.0;
      -- Verwendung des Attributes
      prozeß_id := ein_prozeß'Identity;
      --
      Text_To.Put_Line( Ada.Task_Identification.Image( prozeß_id ) );
   end loop;
end identität;
S'Image
Das Attribut S'Image gilt für jeden skalaren Untertyp S und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Image(Arg : S'Base)
return String

Diese Funktion ergibt ein Abbild des Wertes Arg in Form einer Zeichenkette, d.h. die Zeichenkette enthält eine für Menschen lesbare Form des Wertes.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Image(rot) = "rot"
Die Gegenfunktion hierzu ist S'Value, es gilt S'Value(S'Image(x)) = x

S'Class'Input
Liest ein Objekt des Typs S’Class von einem Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Input eine Funktion mit der folgenden Spezifikation:

function S'Class'Input(
Stream : access Ada.Streams.Root_Stream_Type'Class)
return T'Class

Diese Funktion liest zuerst die externe Kennung von einem Stream und bestimmt die entsprechende interne Kennung durch Aufruf von Tags.Internal_Tag(String'Input(Stream)) und verzweigt dann zu dem Unterprogramm S'Output, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Input.


S'Output
Schreibt ein Objekt des Typs S auf einen Stream und fügt zusätzlich Angaben über Grenzen oder Diskriminanten hinzu, die beim Lesen mittels der Gegenfunktion S'Input ausgewertet werden.

S'Output ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Output use procedure_name;

S'Output bezeichnet eine Funktion mit der folgenden Spezifikation:

procedure S'Output(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in S)

D'Partition_ID
Das Attribut "Partition_ID" identifiziert die Partition (siehe auch Anlage E "Verteilte Systeme"), in der eine Bibliothekseinheit abgearbeitet wird. Der Rückgabewert hat den Typ universal_integer. Ist das Objekt, auf das "Partition_ID" abgewendet werden soll, eine als "pure" deklarierte Bibliothekseinheit oder ist das Objekt keine eigenständige Bibliothekseinheit, so führt die Anweisung zu einem Übersetzungsfehler.
Ist das Objekt eine "remote call interface"-Bibliothekseinheit, so wird die Identifikation der Partition zurückgegeben, auf der der Rumpf abgearbeitet wurde. Ein "remote call interface" ist eine Schnittstelle, mittels derer "remote calls" abgesetzt werden können . Ein "remote call" ist der Aufruf eines Unterprogramms einer Partition, die verschieden von der Partition ist, aus der der Aufruf initiert wird. Eine Partition kann auf einer anderen Plattform ausgeführt werden.

Beispiel:
with Ada;
with Ada.Text_Io;

procedure p is

   package float_io is new package Ada.Text_Io.Float_Io( float );
   id : integer;
begin
   -- id := Ada'Partition; -- Kann nicht übersetzt werden, da "pure".
   -- id := float_io'Partition; -- Kann nicht übersetzt werden, da
   -- nicht auf der Ebene von Bibliothekseinheiten. Wird
   -- innerhalb des Pakets "Ada.Text_Io" deklariert und ist also kein Kindpaket.

   id := Ada.Text_Io'Partition;
   Ada.Text_Io.Put_Line( integer'image( id ) );
end p;

S'Pos
Das Attribut S'Pos ist für jeden diskreten Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Pos(Arg : S'Base)
return universal_integer

Diese Funktion ergibt die Ordnungszahl des Wertes Arg, als einen Wert vom Typ universal_integer.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Pos(rot) = 0
Farben'Pos(blau) = 2
Die Gegenfunktion hierzu ist S'Val, es gilt S'Val(S'Pos(x)) = x


R.C'Position
Liefert für eine Komponente C eines Verbundtyps R die Position der Komponente relativ zum Anfang des Verbundes, wobei diese Positionsdifferenz in Byte ausgegeben wird. Die erste Komponente befindet sich auf Position 0, alle anderen Komponenten des Verbundtyps R berechnen sich wie folgt:

Position := R.C'Address - R'Address.

Dieses Attribut liefert einen Wert des Typs universal_integer.


S'Pred
Das Attribut S'Pred ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Pred(Arg : S'Base)
return S'Base

Für einen Aufzählungstyp ergibt die Funktion den Wert, dessen Ordnungszahl um eins kleiner ist als die des Wertes von Arg; Constraint_Error wird ausgelöst, falls es keinen solchen Wert des Typs gibt.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Pred(blau) = grün


Für einen ganzzahligen Typ ergibt die Funktion den Wert der Subtraktion von eins vom Wert von Arg.

Beispiel:
integer'Pred(5) = 4

Für einen Festpunkttyp ergibt die Funktion den Wert der Subtraktion von Small vom Wert von Arg.
Für einen Gleitpunkttyp ergibt die Funktion die Maschinenzahl (wie in 3.5.7 definiert) unmittelbar unter dem Wert von Arg; Constraint_Error wird ausgelöst, falls es keine solche Maschinenzahl gibt.
Die Gegenfunktion hierzu ist S'Succ.


A'Range(N)
Das Attribut A'Range(N) entspricht dem Bereich A'First(N) .. A'Last(N) eines Reihungstyps A, mit der Ausnahme daß das Präfix A nur einmal ausgewertet wird.
Siehe auch A'First(N), A'Last(N) und A'Length(N).

Beispiel:

declare
   subtype bereich1 is integer range 5..10;
   subtype bereich2 is integer range 20..30;
   type reihung is array (bereich1, bereich2) of integer;

   beispiel : reihung;
begin
   for i in reihung'Range(1) loop
      for j in reihung'Range(2) loop
         beispiel(i,j) := 0;
         -- Belegt alle Elemente der Reihung mit null z.B. Initialisierung einer Matrix
      end loop;
   end loop;
end;



A'Range
Das Attribut A'Range entspricht dem Bereich A'First .. A'Last eines Reihungstyps A, mit der Ausnahme daß das Präfix A nur einmal ausgewertet wird.
Siehe auch A'First, A'Last und A'Length.

Beispiel:
declare
   subtype bereich is integer range 1..26;
   type reihung is array (bereich) of character;

   beispiel : reihung;

begin
   for i in reihung'Range loop
   -- for i in reihung'First .. reihung'Last loop --alternative Anweisung
      beispiel(i) := ' ';
      -- Belegt alle Elemente der Reihung mit Leerzeichen
   end loop;
end;

S'Range
Das Attribut S'Range entspricht dem Bereich S'First .. S'Last eines skalaren Untertyps S.

Beispiel:
subtype Prozent is Natural range 0..100;
Prozent'Range = 0..100


S'Class'Read
Liest ein Objekt des Typs S'Class von einem Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Read eine Funktion mit der folgenden Spezifikation:

procedure S'Class'Read(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : out T'Class)

Der Aufruf verzweigt zu dem Unterprogramm S'Read, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Write.


S'Read
Liest ein Objekt des Typs S von einem Stream, wobei nur die Repräsentation dieses Objektes gelesen wird. Wenn es sich bei dem Objekt um ein unbegrenztes Objekt handelt, muß die Prozedur S'Input verwendet werden.
S'Read ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Read use procedure_name;

S'Read bezeichnet eine Prozedur mit der folgenden Spezifikation:

procedure S'Read(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : out S)


S'Remainder
Für jeden Untertyp S eines Gleitpunkttyps T bezeichnet S'Remainder eine Funktion mit der folgenden Spezifikation:

function S'Remainder (X, Y : T)
return T

Für ein Y ungleich null sei v der Wert X-n*Y, wobei n die Ganzzahl ist, die dem genauen Wert von X/Y am nächsten liegt; für |n-X/Y|=1/2 wird ein gerades n gewählt.
Falls v eine Maschinenzahl vom Typ T ist ergibt die Funktion v; ansonsten ergibt sie null.
Constraint_Error wird ausgelöst falls Y gleich null ist.
Ein Ergebnis von null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.


S'Round
Das Attribut S'Round ist für jeden dezimalen Festpunkt-Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Round(X : universal_real)
return S'Base

Die Funktion ergibt den gerundeten Wert von X. Für ein X das genau zwischen zwei Werten des Typs S liegt wird von null hinweg gerundet.

Beispiel:
procedure runden is

   type FesteZahl is delta 0.1 digits 2;
   -- Wertebereich von -9.9 bis +9.9

   x : float;
   y : FesteZahlen;
begin
   x := -1.88;
   y := FesteZahlen'Round(x); -- y = -1.9
   x := -1.33;
   y := FesteZahlen'Round(x); -- y = -1.3
   x := 0.55;
   y := FesteZahlen'Round(x); -- y = 0.6
   x := 1.22;
   y := FesteZahlen'Round(x); -- y = 1.2
   x := 1.77;
   y := FesteZahlen'Round(x); -- y = 1.8
end runden;

S'Rounding
Das Attribut S'Rounding ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Rounding (X : T)
return T

Die Funktion ergibt den ganzzahligen Wert der X am nächsten liegt.
Falls X genau auf halbem Weg zwischen zwei Ganzzahlen liegt wird von null hinweg gerundet.
Ein Ergebnis gleich null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure rundung is
   x, y : float;
begin
   x := -1.8;
   y := float'Rounding(x); -- y = -2.0
   x := -1.5;
   y := float'Rounding(x); -- y = -2.0

   x := -1.3;
   y := float'Rounding(x); -- y = -1.0

   x := -0.5;
   if float'Signed_Zeros then
      y := float'Rounding(x); -- y = -0.0
   else
      y := float'Rounding(x); -- y = 0.0
   end if;

   x := 0.5;
   y := float'Rounding(x); -- y = 1.0
   x := 1.2;
   y := float'Rounding(x); -- y = 1.0
   x := 1.7;
   y := float'Rounding(x); -- y = 2.0
end rundung;


Siehe auch: S'Ceiling, S'Floor, S'Truncation und S'Unbiased_Rounding


S'Safe_First
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt die untere Grenze des sicheren Bereichs des Typs T.
Falls die Anlage G "Numerik" vom Übersetzer nicht berücksichtigt wird, ist der Wert dieses Attributs implementierungsbestimmt.
Der Wert dieses Attributs ist vom Typ universal_real.


S'Safe_Last
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt die obere Grenze des sicheren Bereichs des Typs T.
Falls die Anlage G "Numerik" vom Übersetzer nicht berücksichtigt wird, ist der Wert dieses Attributs implementierungsbestimmt.
Der Wert dieses Attributs ist vom Typ universal_real.


S'Scale
Für jeden dezimalen Festpunkt-Untertyp S bezeichnet das Attribut S'Scale die Skala des Untertyps S, definiert als den Wert N, so daß S'Delta = 10.0**(-N).
Die Skala zeigt die Position des Kommas im Vergleich zur am weitesten rechts liegenden signifikanten Stelle der Werte des Untertyps S.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Scaling
Für jeden Untertyp S eines Gleitpunkttyps T bezeichnet S'Scaling eine Funktion mit der folgenden Spezifikation:

function S'Scaling (X : T; Adjustment : universal_integer)
return T

Sei v der Wert X*T'Machine_Radix**Adjustment.
Falls v eine Maschinenzahl vom Typ T ist, oder falls |v|>=T'Model_Small ergibt die Funktion v; ansonsten ergibt sie eine der Maschinenzahlen vom Typ T die v am nächsten liegen.
Constraint_Error wird ausgelöst falls v sich außerhalb des Basisbereichs von S befindet.
Ein Ergebnis gleich null hat das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.


S'Signed_Zeros
Für jeden Untertyp S eines Gleitpunkt-Typs T ergibt dieses Attribut den Wert "wahr" wenn die Hardwaredarstellung für den Typ T dazu in der Lage ist, Nullen mit sowohl positivem als auch negativem Vorzeichen darzustellen, welche von den vordefinierten Operationen vom Typ T erzeugt werden, wie in IEC 559:1989 spezifiziert; ansonsten ergibt es den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Size
Für einen Typ S bezeichnet S'Size die Größe (in Bit), wobei von dem minimalen Wert ausgegangen wird, der für die Repräsentation benötigt wird. Für ein Objekt dieses Typs kann durchaus ein größerer Wert ermittelt werden, wie es z. B. bei Verbundtypen der Fall ist, wenn eine Ausrichtung an Wortgrenzen vorgenommen wird.
Falls S unbestimmt ist, ist die ermittelte Größe implementierungsabhängig.
Der Wert dieses Attributs ist vom Typ universal_integer.


X'Size
Das Attribut X'Size bezeichnet die Größe der Darstellung des Objektes, angegeben in Bit. Es bezieht sich auf Objekte und nicht auf Typen. Der Wert dieses Attributs ist vom Typ universal_integer. Siehe auch S'Size.


S'Storage_Pool
Für jeden Zugriffs-Untertyp S bezeichnet das Attribut "Storage_Pool" den Speicherpool des Typs von S.
Der Typ dieses Attributs ist Root_Storage_Pool'Class.


S'Storage_Size
Der Rückgabewert dieses Attributs entspricht einem Aufruf von Storage_Size(S'Storage_Pool) und liefert ein Maß der für den Pool reservierten Speichereinheiten. Der Wert entspricht der Gesamtzahl der Speichereinheiten, die für die Speicherbelegung aller Objekte des Typs S reserviert sind.
Der Typ dieses Attributs ist universal_integer.


T'Storage_Size
Das Attribut "Storage_Size" liefert die Anzahl Speicherelemente, die für den Prozeß T reserviert sind. Anzahl ist vom Typ universal_integer. Falls der Prozeß T über einen Laufzeitstapel verfügt, so ist dessen Größe berücksichtigt.
In manchen Laufzeitsysteme wird einem Prozeß noch weiterer Speicherplatz zugewiesen, in dem z. B. sogenannte "task control blocks" abgelegt werden. Ob solcher Speicherplatz ebenfalls durch das Attribut "Storage_Size" berücksichtigt ist, wird durch das Referenzhandbuch nicht spezifiziert.


S'Succ
Das Attribut S'Succ ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Succ(Arg : S'Base) return S'Base

Für einen Aufzählungstyp ergibt die Funktion den Wert dessen Ordnungszahl um eins über der des Wertes von Arg liegt; Constraint_Error wird ausgelöst, falls es von diesem Typ keinen solchen Wert gibt.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Succ(rot) = grün

Für einen ganzzahligen Typ ergibt die Funktion den Wert der Addition von eins zum Wert von Arg.

Beispiel:
integer'Succ(2) = 3

Für einen Festpunkttyp ergibt die Funktion den Wert der Addition von S'Small zum Wert von Arg.
Für einen Gleitpunkt-Typ ergibt die Funktion die Maschinenzahl unmittelbar über dem Wert von Arg; Constraint_Error wird ausgelöst, falls es keine solche Maschinenzahl gibt.
Die Gegenfunktion hierzu ist S'Pred.


S'Tag
Für jeden erweiterbaren Typ T liefert das Attribut S'Tag die Kennung des Typs T. Der Wert dieses Attributs ist vom Typ Tag, das im Paket Ada.Tags privat deklariert ist. Man kann diese Kennung z. B. dazu verwenden, Objekte erweiterbaren Typs dahingehend zu vergleichen, ob sie bezüglich ihrer Ableitungsstufe übereinstimmen.


X'Tag
Für ein Präfix X welches ein klassenweiter erweiterbarer Typ ist:
X'Tag bezeichnet die Kennung von X.
Der Wert dieses Attributs ist vom Typ Tag.


T'Terminated
Das Attribut "Terminated" ist vom Typ "Boolean" und liefert den Wert "wahr", wenn der Prozeß T beendet ist, andernfalls den Wert "falsch" (siehe Zustände von Prozessen).

Beispiel:
-- ...
if prozess'terminated then
   text_io.put_line( "beendet" );
else
   text_io.put_line( "nicht beendet" );
end if;
-- ...

S'Truncation
Das Attribut S'Truncation ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Truncation (X : T)
return T

Die Funktion ergibt den Wert Ceiling(X) falls X negativ ist und ansonsten Floor(X), entspricht also einem Abschneiden der Nachkommastellen.
Ein Ergebnis gleich null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure abhacken is
   x, y : float;
begin
   x := -1.8;
   y := float'Truncation(x); -- y = -1.0
   x := -1.3;
   y := float'Truncation(x); -- y = -1.0

   x := -0.5;
   if float'Signed_Zeros then
      y := float'Truncation(x); -- y = -0.0
   else
      y := float'Truncation(x); -- y = 0.0
   end if;

   x := 0.5;
   y := float'Truncation(x); -- y = 0.0
   x := 1.2;
   y := float'Truncation(x); -- y = 1.0
   x := 1.7;
   y := float'Truncation(x); -- y = 1.0
end abhacken;


Siehe auch: S'Ceiling, S'Floor, S'Rounding und S'Unbiased_Rounding.


S'Unbiased_Rounding
Das Attribut S'Unbiased_Rounding ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Unbiased_Rounding (X : T)
return T

Die Funktion ergibt den ganzzahligen Wert der X am nächsten liegt, wobei zur geraden Ganzzahl gerundet wird falls X genau auf halbem Weg zwischen zwei Ganzzahlen liegt.
Ein Ergebnis gleich null erhält das Vorzeichen von X, falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure gerades_runden is
   x, y : float;
begin
   x := 0.4;
   y := float'Unbiased_Rounding(x); -- y = 0.0
   x := 0.5;
   y := float'Unbiased_Rounding(x); -- y = 0.0
   x := 0.6;
   y := float'Unbiased_Rounding(x); -- y = 1.0

   x := 1.4;
   y := float'Unbiased_Rounding(x); -- y = 1.0
   x := 1.5;
   y := float'Unbiased_Rounding(x); -- y = 2.0
   x := 1.6;
   y := float'Unbiased_Rounding(x); -- y = 2.0
end gerades_runden;


Siehe auch: S'Truncation und S'Rounding.


X'Unchecked_Access
Für ein Präfix X, das eine Alias-Kennzeichnung eines Objekts bezeichnet:
Alle Regeln und die Semantik die auf X'Access zutreffen gelten auch für X'Unchecked_Access, mit der Ausnahme, daß für die Zwecke der Zugriffsregeln und Prüfungen X so erscheint, als wäre es unmittelbar innerhalb eines Bibliothekspakets deklariert.


S'Val
Das Attribut S'Val ist für jeden diskreten Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Val(Arg : universal_integer)
return S'Base

Diese Funktion ergibt einen Wert vom Typ S, dessen Ordnungszahl dem Wert von Arg gleicht.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Val(0) = rot
Farben'Val(2) = blau

Die Gegenfunktion hierzu ist S'Pos, es gilt
S'Val(S'Pos(x)) = x



X'Valid
Für ein Präfix X, das ein skalares Objekt bezeichnet, ergibt das Attribut "Valid" nur dann "wahr", wenn das von X bezeichnete Objekt normal ist und eine gültige Darstellung hat.
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Value
Das Attribut S'Value ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Value(Arg : String)
return S'Base

Diese Funktion ergibt den Zahlenwert eines Abbilds, das als Zeichenkette übergeben wurde, Leerzeichen an Anfang und Ende werden ignoriert.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Value("blau") = blau

Die Gegenfunktion hierzu ist S'Image, es gilt
S'Value(S'Image(x)) = x



P'Version
Das Attribut "Version" ergibt eine Versions"nummer" für die Spezifikation einer Programmeinheit. Der Typ des Rückgabewerts ist vom Typ "String". Siehe auch das Attribut "Body_Version" für den Rumpf und Anlage E.
Wird die Versionsnummer zu der Deklaration einer Programmeinheit ausgegeben, danach die Deklaration verändert, übersetzt und von neuem die Versionsnummer ausgegeben, so unterscheiden sich beide Versionsnummern. Allerdings ist nicht sichergestellt, daß an diesen Nummern abgelesen kann, welche der beiden Deklarationen die jüngere bzw. ältere ist.
Dieses Attribut steht im Zusammenhang mit verteilten Systemen. Ein Ada-Programm, das über mehrere Partitionen verteilt ist, kann mit diesem Attribut feststellen, ob die Konfiguration so vorliegt, wie vorher festgelegt.

Beispiel:
with Ada.Text_Io;

procedure p is
   version : string := Ada.Text_Io'Version;
begin
   Ada.Text_Io.Put_Line( version );
end p;



S'Wide_Image
Das Attribut S'Wide_Image ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Wide_Image(Arg : S'Base)
return Wide_String

Diese Funktion ergibt ein Abbild des Wertes Arg in Form einer Zeichenkette, das heißt die Zeichenkette enthält eine lesbare Form des Zahlenwertes. (Siehe auch S'Image)
Die Gegenfunktion hierzu ist S'Wide_Value,
es gilt S'Wide_Value(S'Wide_Image(x)) = x


S'Wide_Value
Das Attribut S'Wide_Value ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Wide_Value(Arg : Wide_String)
return S'Base

Diese Funktion ergibt den Zahlenwert eines Abbilds das als Wide_String übergeben wurde, Leerzeichen an Anfang und Ende werden ignoriert. (Siehe auch S'Value)
Die Gegenfunktion hierzu ist S'Wide_Image, es gilt
S'Wide_Value(S'Wide_Image(x)) = x


S'Wide_Width
Das Attribut S'Wide_Width ist für jeden skalaren Untertyp S gültig und bezeichnet die maximale Länge eines von S'Wide_Image zurückgegebenen Wide_String für alle Werte des Untertyps S. Der Wert ist vom Typ universal_integer.
Für einen Untertyp mit leerem Bereich ist dieser Wert 0. (Siehe auch S'Width)


S'Width
Das Attribut S'Width ist für jeden skalaren Untertyp S gültig und bezeichnet die maximale Länge einer von S'Image zurückgegebenen Zeichenkette für alle Werte des Untertyps S.
Der Wert ist vom Typ universal_integer.
Für einen Untertyp mit leerem Bereich ist dieser Wert 0.

Beispiel:
type Farben is (rot, gruen, blau);
Farben'Width = 5, da Farben'Image(gruen) = "gruen"


S'Class'Write
Schreibt ein Objekt des Typs S'Class auf einen Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Write eine Prozedur mit der folgenden Spezifikation:

procedure S'Class'Write(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in T'Class)

Der Aufruf verzweigt zu dem Unterprogramm S'Write, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Read.


S'Write
Schreibt ein Objekt des Typs S auf einen Stream, wobei nur die Repräsentation dieses Objektes ausgegeben wird. Wenn es sich bei dem Objekt um ein unbegrenztes Objekt handelt, muß die Prozedur S'Output verwendet werden.
S'Write ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Write use procedure_name;

S'Write bezeichnet eine Prozedur mit der folgenden Spezifikation:

procedure S'Write(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in S)

S'Machine
Für jeden Untertyp S eines Gleitpunkt-Typs T bezeichnet das Attribut S'Machine eine Funktion mit der folgenden Spezifikation:

function S'Machine (X : T)
return T

Falls X eine Maschinenzahl vom Typ T ist ergibt die Funktion X; ansonsten ergibt sie den Wert der durch Rundung oder Abschneiden von X zu einer der beiden nächstliegenden Maschinenzahlen vom Typ T gewonnen wird.
Constraint_Error wird ausgelöst falls das Runden oder Abschneiden von X auf die Genauigkeit der Maschinenzahlen in einem Wert außerhalb des Grundbereichs von S resultiert.
Ein Ergebnis gleich null hat das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.


S'Machine_Overflows
Für jeden Untertyp S eines Festpunkttyps T:
Ergibt den Wert "wahr" wenn für jede vordefinierte Operation, die ein Ergebnis vom Typ T liefert, Überlauf und Division durch null erkannt und durch Auslösen von Constraint_Error gemeldet werden; ergibt ansonsten den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Machine_Overflows
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt den Wert "wahr" wenn für jede vordefinierte Operation, die ein Ergebnis vom Typ T liefert, Überlauf und Division durch null erkannt und durch Auslösen von Constraint_Error gemeldet werden; ergibt ansonsten den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Machine_Radix
Für jeden Untertyp S eines Festpunkttyps T:
Ergibt den Radix der Hardwaredarstellung des Typs T.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Machine_Radix
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt den Radix der Hardwaredarstellung des Typs T.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Machine_Rounds
Für jeden Untertyp S eines Festpunkttyps T:
Ergibt den Wert "wahr" falls ungenaue Ergebnisse aller vordefinierten Operationen die ein Ergebnis vom Typ T liefern gerundet werden; ergibt ansonsten den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Machine_Rounds
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt den Wert "wahr" falls ungenaue Ergebnisse aller vordefinierten Operationen die ein Ergebnis vom Typ T liefern gerundet werden; ergibt ansonsten den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Max
Das Attribut S'Max ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Max(Left, Right : S'Base)
return S'Base

Die Funktion ergibt den größeren der Werte der beiden Parameter.

Beispiel:

integer'Max(5, 7) = 7

oder

type Farben is (rot, grün, blau);
Farben'Max(blau, rot) = blau


S'Max_Size_In_Storage_Elements
Für jeden Untertyp S bezeichnet dieses Attribut den maximalen Wert für Size_In_Storage_Elements der über Allocate für einen Zeigertyp angefordert wird, der auf den Untertyp S verweist. Der Wert dieses Attributs ist vom Typ universal_integer.


S'Min
Das Attribut S'Min ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Min(Left, Right : S'Base)
return S'Base

Die Funktion ergibt den kleineren der Werte der beiden Parameter.

Beispiel:

integer'Min(5, 7) = 5

oder

type Farben is (rot, grün, blau);
Farben'Min(blau, rot) = rot


S'Modulus
Für jeden modularen Untertyp S liefert das Attribut S'Modulus den Wert, der bei der Modulo-Deklaration des Typs S angegeben wurde. Dieser Wert ist vom Typ universal_integer.


S'Class'Output
Schreibt ein Objekt des Typs S'Class auf einen Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Output eine Prozedur mit der folgenden Spezifikation:

procedure S'Class'Output(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in T'Class)

Diese Prozedur schreibt zuerst durch einen Aufruf von String'Output(Tags.External_Tag(Item'Tag) die externe Kennung von Item auf einen Stream und verzweigt dann zu dem Unterprogramm S'Output, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Input.


S'Output
Schreibt ein Objekt des Typs S auf einen Stream und fügt zusätzlich Angaben über Grenzen oder Diskriminanten hinzu, die beim Lesen mittels der Gegenfunktion S'Input ausgewertet werden.

S'Output ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Output use procedure_name;

S'Output bezeichnet eine Funktion mit der folgenden Spezifikation:

procedure S'Output(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in S)


D'Partition_ID
Das Attribut "Partition_ID" identifiziert die Partition (siehe auch Anlage E "Verteilte Systeme"), in der eine Bibliothekseinheit abgearbeitet wird. Der Rückgabewert hat den Typ universal_integer. Ist das Objekt, auf das "Partition_ID" abgewendet werden soll, eine als "pure" deklarierte Bibliothekseinheit oder ist das Objekt keine eigenständige Bibliothekseinheit, so führt die Anweisung zu einem Übersetzungsfehler.
Ist das Objekt eine "remote call interface"-Bibliothekseinheit, so wird die Identifikation der Partition zurückgegeben, auf der der Rumpf abgearbeitet wurde. Ein "remote call interface" ist eine Schnittstelle, mittels derer "remote calls" abgesetzt werden können . Ein "remote call" ist der Aufruf eines Unterprogramms einer Partition, die verschieden von der Partition ist, aus der der Aufruf initiert wird. Eine Partition kann auf einer anderen Plattform ausgeführt werden.

Beispiel:
with Ada;
with Ada.Text_Io;

procedure p is
   package float_io is new package Ada.Text_Io.Float_Io( float );

   id : integer;
begin
   -- id := Ada'Partition; -- Kann nicht übersetzt werden, da "pure".
   -- id := float_io'Partition; -- Kann nicht übersetzt werden, da
   -- nicht auf der Ebene von Bibliothekseinheiten. Wird
   -- innerhalb des Pakets "Ada.Text_Io" deklariert und
   -- ist also kein Kindpaket.
   id := Ada.Text_Io'Partition;
   Ada.Text_Io.Put_Line( integer'image( id ) );
end p;



S'Pos
Das Attribut S'Pos ist für jeden diskreten Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Pos(Arg : S'Base)
return universal_integer

Diese Funktion ergibt die Ordnungszahl des Wertes Arg, als einen Wert vom Typ universal_integer.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Pos(rot) = 0
Farben'Pos(blau) = 2

Die Gegenfunktion hierzu ist S'Val, es gilt S'Val(S'Pos(x)) = x


R.C'Position
Liefert für eine Komponente C eines Verbundtyps R die Position der Komponente relativ zum Anfang des Verbundes, wobei diese Positionsdifferenz in Byte ausgegeben wird. Die erste Komponente befindet sich auf Position 0, alle anderen Komponenten des Verbundtyps R berechnen sich wie folgt:

Position := R.C'Address - R'Address.

Dieses Attribut liefert einen Wert des Typs universal_integer.


S'Pred
Das Attribut S'Pred ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Pred(Arg : S'Base)
return S'Base

Für einen Aufzählungstyp ergibt die Funktion den Wert, dessen Ordnungszahl um eins kleiner ist als die des Wertes von Arg; Constraint_Error wird ausgelöst, falls es keinen solchen Wert des Typs gibt.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Pred(blau) = grün


Für einen ganzzahligen Typ ergibt die Funktion den Wert der Subtraktion von eins vom Wert von Arg.

Beispiel:
integer'Pred(5) = 4

Für einen Festpunkttyp ergibt die Funktion den Wert der Subtraktion von Small vom Wert von Arg.
Für einen Gleitpunkttyp ergibt die Funktion die Maschinenzahl (wie in 3.5.7 definiert) unmittelbar unter dem Wert von Arg; Constraint_Error wird ausgelöst, falls es keine solche Maschinenzahl gibt.
Die Gegenfunktion hierzu ist S'Succ.


A'Range(N)
Das Attribut A'Range(N) entspricht dem Bereich A'First(N) .. A'Last(N) eines Reihungstyps A, mit der Ausnahme daß das Präfix A nur einmal ausgewertet wird.
Siehe auch A'First(N), A'Last(N) und A'Length(N).

Beispiel:
declare
   subtype bereich1 is integer range 5..10;
   subtype bereich2 is integer range 20..30;
   type reihung is array (bereich1, bereich2) of integer;

   beispiel : reihung;

begin
   for i in reihung'Range(1) loop
      for j in reihung'Range(2) loop
         beispiel(i,j) := 0;
         -- Belegt alle Elemente der Reihung mit null
         -- z.B. Initialisierung einer Matrix
      end loop;
   end loop;
end;



A'Range
Das Attribut A'Range entspricht dem Bereich A'First .. A'Last eines Reihungstyps A, mit der Ausnahme daß das Präfix A nur einmal ausgewertet wird.
Siehe auch A'First, A'Last und A'Length.

Beispiel:

declare
   subtype bereich is integer range 1..26;
   type reihung is array (bereich) of character;

   beispiel: reihung;

begin
   for i in reihung'Range loop
      beispiel(i) := ' ';
      -- Belegt alle Elemente der Reihung mit Leerzeichen
end loop;
end;



 



S'Range
Das Attribut S'Range entspricht dem Bereich S'First .. S'Last eines skalaren Untertyps S.

Beispiel:
subtype Prozent is Natural range 0..100;
Prozent'Range = 0..100


S'Class'Read
Liest ein Objekt des Typs S'Class von einem Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Read eine Funktion mit der folgenden Spezifikation:

procedure S'Class'Read(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : out T'Class)

Der Aufruf verzweigt zu dem Unterprogramm S'Read, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Write.


S'Read
Liest ein Objekt des Typs S von einem Stream, wobei nur die Repräsentation dieses Objektes gelesen wird. Wenn es sich bei dem Objekt um ein unbegrenztes Objekt handelt, muß die Prozedur S'Input verwendet werden.
S'Read ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Read use procedure_name;

S'Read bezeichnet eine Prozedur mit der folgenden Spezifikation:

procedure S'Read(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : out S)


S'Remainder
Für jeden Untertyp S eines Gleitpunkttyps T bezeichnet S'Remainder eine Funktion mit der folgenden Spezifikation:

function S'Remainder (X, Y : T)
return T

Für ein Y ungleich null sei v der Wert X-n*Y, wobei n die Ganzzahl ist, die dem genauen Wert von X/Y am nächsten liegt; für |n-X/Y|=1/2 wird ein gerades n gewählt.
Falls v eine Maschinenzahl vom Typ T ist ergibt die Funktion v; ansonsten ergibt sie null.
Constraint_Error wird ausgelöst falls Y gleich null ist.
Ein Ergebnis von null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.


S'Round
Das Attribut S'Round ist für jeden dezimalen Festpunkt-Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Round(X : universal_real)
return S'Base

Die Funktion ergibt den gerundeten Wert von X. Für ein X das genau zwischen zwei Werten des Typs S liegt wird von null hinweg gerundet.

Beispiel:
procedure runden is

   type FesteZahl is delta 0.1 digits 2;
   -- Wertebereich von -9.9 bis +9.9

   x : float;
   y : FesteZahlen;
begin
   x := -1.88;
   y := FesteZahlen'Round(x); -- y = -1.9
   x := -1.33;
   y := FesteZahlen'Round(x); -- y = -1.3
   x := 0.55;
   y := FesteZahlen'Round(x); -- y = 0.6
   x := 1.22;
   y := FesteZahlen'Round(x); -- y = 1.2
   x := 1.77;
   y := FesteZahlen'Round(x); -- y = 1.8
end runden;


S'Rounding
Das Attribut S'Rounding ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Rounding (X : T)
return T

Die Funktion ergibt den ganzzahligen Wert der X am nächsten liegt.
Falls X genau auf halbem Weg zwischen zwei Ganzzahlen liegt wird von null hinweg gerundet.
Ein Ergebnis gleich null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure rundung is
   x, y : float;
begin
   x := -1.8;
   y := float'Rounding(x); -- y = -2.0
   x := -1.5;
   y := float'Rounding(x); -- y = -2.0

   x := -1.3;
   y := float'Rounding(x); -- y = -1.0

   x := -0.5;
   if float'Signed_Zeros then
      y := float'Rounding(x); -- y = -0.0
   else
      y := float'Rounding(x); -- y = 0.0
   end if;

   x := 0.5;
   y := float'Rounding(x); -- y = 1.0
   x := 1.2;
   y := float'Rounding(x); -- y = 1.0
   x := 1.7;
   y := float'Rounding(x); -- y = 2.0
end rundung;


Siehe auch: S'Ceiling, S'Floor, S'Truncation und S'Unbiased_Rounding


S'Safe_First
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt die untere Grenze des sicheren Bereichs des Typs T.
Falls die Anlage G "Numerik" vom Übersetzer nicht berücksichtigt wird, ist der Wert dieses Attributs implementierungsbestimmt.
Der Wert dieses Attributs ist vom Typ universal_real.


S'Safe_Last
Für jeden Untertyp S eines Gleitpunkttyps T:
Ergibt die obere Grenze des sicheren Bereichs des Typs T.
Falls die Anlage G "Numerik" vom Übersetzer nicht berücksichtigt wird, ist der Wert dieses Attributs implementierungsbestimmt.
Der Wert dieses Attributs ist vom Typ universal_real.


S'Scale
Für jeden dezimalen Festpunkt-Untertyp S bezeichnet das Attribut S'Scale die Skala des Untertyps S, definiert als den Wert N, so daß S'Delta = 10.0**(-N).
Die Skala zeigt die Position des Kommas im Vergleich zur am weitesten rechts liegenden signifikanten Stelle der Werte des Untertyps S.
Der Wert dieses Attributs ist vom Typ universal_integer.


S'Scaling
Für jeden Untertyp S eines Gleitpunkttyps T bezeichnet S'Scaling eine Funktion mit der folgenden Spezifikation:

function S'Scaling (X : T; Adjustment : universal_integer)
return T

Sei v der Wert X*T'Machine_Radix**Adjustment.
Falls v eine Maschinenzahl vom Typ T ist, oder falls |v|>=T'Model_Small ergibt die Funktion v; ansonsten ergibt sie eine der Maschinenzahlen vom Typ T die v am nächsten liegen.
Constraint_Error wird ausgelöst falls v sich außerhalb des Basisbereichs von S befindet.
Ein Ergebnis gleich null hat das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.


S'Signed_Zeros
Für jeden Untertyp S eines Gleitpunkt-Typs T ergibt dieses Attribut den Wert "wahr" wenn die Hardwaredarstellung für den Typ T dazu in der Lage ist, Nullen mit sowohl positivem als auch negativem Vorzeichen darzustellen, welche von den vordefinierten Operationen vom Typ T erzeugt werden, wie in IEC 559:1989 spezifiziert; ansonsten ergibt es den Wert "falsch".
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Size
Für einen Typ S bezeichnet S'Size die Größe (in Bit), wobei von dem minimalen Wert ausgegangen wird, der für die Repräsentation benötigt wird. Für ein Objekt dieses Typs kann durchaus ein größerer Wert ermittelt werden, wie es z. B. bei Verbundtypen der Fall ist, wenn eine Ausrichtung an Wortgrenzen vorgenommen wird.
Falls S unbestimmt ist, ist die ermittelte Größe implementierungsabhängig.
Der Wert dieses Attributs ist vom Typ universal_integer.


X'Size
Das Attribut X'Size bezeichnet die Größe der Darstellung des Objektes, angegeben in Bit. Es bezieht sich auf Objekte und nicht auf Typen. Der Wert dieses Attributs ist vom Typ universal_integer. Siehe auch S'Size.


S'Storage_Pool
Für jeden Zugriffs-Untertyp S bezeichnet das Attribut "Storage_Pool" den Speicherpool des Typs von S.
Der Typ dieses Attributs ist Root_Storage_Pool'Class.


S'Storage_Size
Der Rückgabewert dieses Attributs entspricht einem Aufruf von Storage_Size(S'Storage_Pool) und liefert ein Maß der für den Pool reservierten Speichereinheiten. Der Wert entspricht der Gesamtzahl der Speichereinheiten, die für die Speicherbelegung aller Objekte des Typs S reserviert sind.
Der Typ dieses Attributs ist universal_integer.


T'Storage_Size
Das Attribut "Storage_Size" liefert die Anzahl Speicherelemente, die für den Prozeß T reserviert sind. Anzahl ist vom Typ universal_integer. Falls der Prozeß T über einen Laufzeitstapel verfügt, so ist dessen Größe berücksichtigt.
In manchen Laufzeitsysteme wird einem Prozeß noch weiterer Speicherplatz zugewiesen, in dem z. B. sogenannte "task control blocks" abgelegt werden. Ob solcher Speicherplatz ebenfalls durch das Attribut "Storage_Size" berücksichtigt ist, wird durch das Referenzhandbuch nicht spezifiziert.


S'Succ
Das Attribut S'Succ ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Succ(Arg : S'Base)
return S'Base

Für einen Aufzählungstyp ergibt die Funktion den Wert dessen Ordnungszahl um eins über der des Wertes von Arg liegt; Constraint_Error wird ausgelöst, falls es von diesem Typ keinen solchen Wert gibt.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Succ(rot) = grün


Für einen ganzzahligen Typ ergibt die Funktion den Wert der Addition von eins zum Wert von Arg.

Beispiel:

integer'Succ(2) = 3

Für einen Festpunkttyp ergibt die Funktion den Wert der Addition von S'Small zum Wert von Arg.
Für einen Gleitpunkt-Typ ergibt die Funktion die Maschinenzahl unmittelbar über dem Wert von Arg; Constraint_Error wird ausgelöst, falls es keine solche Maschinenzahl gibt.
Die Gegenfunktion hierzu ist S'Pred.


S'Tag
Für jeden erweiterbaren Typ T liefert das Attribut S'Tag die Kennung des Typs T. Der Wert dieses Attributs ist vom Typ Tag, das im Paket Ada.Tags privat deklariert ist. Man kann diese Kennung z. B. dazu verwenden, Objekte erweiterbaren Typs dahingehend zu vergleichen, ob sie bezüglich ihrer Ableitungsstufe übereinstimmen.


X'Tag
Für ein Präfix X welches ein klassenweiter erweiterbarer Typ ist:
X'Tag bezeichnet die Kennung von X.
Der Wert dieses Attributs ist vom Typ Tag.


T'Terminated
Das Attribut "Terminated" ist vom Typ "Boolean" und liefert den Wert "wahr", wenn der Prozeß T beendet ist, andernfalls den Wert "falsch" (siehe Zustände von Prozessen).

Beispiel:
-- ...
if prozess'terminated then
   text_io.put_line( "beendet" );
else
   text_io.put_line( "nicht beendet" );
end if;
-- ...



S'Truncation
Das Attribut S'Truncation ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Truncation (X : T)
return T

Die Funktion ergibt den Wert Ceiling(X) falls X negativ ist und ansonsten Floor(X), entspricht also einem Abschneiden der Nachkommastellen.
Ein Ergebnis gleich null erhält das Vorzeichen von X falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure abhacken is
   x, y : float;
begin
   x := -1.8;
   y := float'Truncation(x); -- y = -1.0
   x := -1.3;
   y := float'Truncation(x); -- y = -1.0

   x := -0.5;
   if float'Signed_Zeros then
      y := float'Truncation(x); -- y = -0.0
   else
      y := float'Truncation(x); -- y = 0.0
   end if;

   x := 0.5;
   y := float'Truncation(x); -- y = 0.0
   x := 1.2;
   y := float'Truncation(x); -- y = 1.0
   x := 1.7;
   y := float'Truncation(x); -- y = 1.0
end abhacken;


Siehe auch: S'Ceiling, S'Floor, S'Rounding und S'Unbiased_Rounding.


S'Unbiased_Rounding
Das Attribut S'Unbiased_Rounding ist für jeden Untertyp S eines Gleitpunkttyps T gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Unbiased_Rounding (X : T)
return T

Die Funktion ergibt den ganzzahligen Wert der X am nächsten liegt, wobei zur geraden Ganzzahl gerundet wird falls X genau auf halbem Weg zwischen zwei Ganzzahlen liegt.
Ein Ergebnis gleich null erhält das Vorzeichen von X, falls S'Signed_Zeros "wahr" ist.

Beispiel:
procedure gerades_runden is
   x, y : float;
begin
   x := 0.4;
   y := float'Unbiased_Rounding(x); -- y = 0.0
   x := 0.5;
   y := float'Unbiased_Rounding(x); -- y = 0.0
   x := 0.6;
   y := float'Unbiased_Rounding(x); -- y = 1.0

   x := 1.4;
   y := float'Unbiased_Rounding(x); -- y = 1.0
   x := 1.5;
   y := float'Unbiased_Rounding(x); -- y = 2.0
   x := 1.6;
   y := float'Unbiased_Rounding(x); -- y = 2.0
end gerades_runden;


Siehe auch: S'Truncation und S'Rounding.


X'Unchecked_Access
Für ein Präfix X, das eine Alias-Kennzeichnung eines Objekts bezeichnet:
Alle Regeln und die Semantik die auf X'Access zutreffen gelten auch für X'Unchecked_Access, mit der Ausnahme, daß für die Zwecke der Zugriffsregeln und Prüfungen X so erscheint, als wäre es unmittelbar innerhalb eines Bibliothekspakets deklariert.


S'Val
Das Attribut S'Val ist für jeden diskreten Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Val(Arg : universal_integer)
return S'Base

Diese Funktion ergibt einen Wert vom Typ S, dessen Ordnungszahl dem Wert von Arg gleicht.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Val(0) = rot
Farben'Val(2) = blau


Die Gegenfunktion hierzu ist S'Pos, es gilt
S'Val(S'Pos(x)) = x


X'Valid
Für ein Präfix X, das ein skalares Objekt bezeichnet, ergibt das Attribut "Valid" nur dann "wahr", wenn das von X bezeichnete Objekt normal ist und eine gültige Darstellung hat.
Der Wert dieses Attributs ist vom vordefinierten Typ Boolean.


S'Value
Das Attribut S'Value ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Value(Arg : String)
return S'Base

Diese Funktion ergibt den Zahlenwert eines Abbilds, das als Zeichenkette übergeben wurde, Leerzeichen an Anfang und Ende werden ignoriert.

Beispiel:
type Farben is (rot, grün, blau);
Farben'Value("blau") = blau


Die Gegenfunktion hierzu ist S'Image, es gilt
S'Value(S'Image(x)) = x


P'Version
Das Attribut "Version" ergibt eine Versions"nummer" für die Spezifikation einer Programmeinheit. Der Typ des Rückgabewerts ist vom Typ "String". Siehe auch das Attribut "Body_Version" für den Rumpf und Anlage E.
Wird die Versionsnummer zu der Deklaration einer Programmeinheit ausgegeben, danach die Deklaration verändert, übersetzt und von neuem die Versionsnummer ausgegeben, so unterscheiden sich beide Versionsnummern. Allerdings ist nicht sichergestellt, daß an diesen Nummern abgelesen kann, welche der beiden Deklarationen die jüngere bzw. ältere ist.
Dieses Attribut steht im Zusammenhang mit verteilten Systemen. Ein Ada-Programm, das über mehrere Partitionen verteilt ist, kann mit diesem Attribut feststellen, ob die Konfiguration so vorliegt, wie vorher festgelegt.

Beispiel:
with Ada.Text_Io;

procedure p is
   version : string := Ada.Text_Io'Version;
begin
   Ada.Text_Io.Put_Line( version );
end p;



S'Wide_Image
Das Attribut S'Wide_Image ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Wide_Image(Arg : S'Base)
return Wide_String

Diese Funktion ergibt ein Abbild des Wertes Arg in Form einer Zeichenkette, das heißt die Zeichenkette enthält eine lesbare Form des Zahlenwertes. (Siehe auch S'Image)
Die Gegenfunktion hierzu ist S'Wide_Value,
es gilt S'Wide_Value(S'Wide_Image(x)) = x


S'Wide_Value
Das Attribut S'Wide_Value ist für jeden skalaren Untertyp S gültig und bezeichnet eine Funktion mit der folgenden Spezifikation:

function S'Wide_Value(Arg : Wide_String)
return S'Base

Diese Funktion ergibt den Zahlenwert eines Abbilds das als Wide_String übergeben wurde, Leerzeichen an Anfang und Ende werden ignoriert. (Siehe auch S'Value)
Die Gegenfunktion hierzu ist S'Wide_Image, es gilt
S'Wide_Value(S'Wide_Image(x)) = x


S'Wide_Width
Das Attribut S'Wide_Width ist für jeden skalaren Untertyp S gültig und bezeichnet die maximale Länge eines von S'Wide_Image zurückgegebenen Wide_String für alle Werte des Untertyps S. Der Wert ist vom Typ universal_integer.
Für einen Untertyp mit leerem Bereich ist dieser Wert 0. (Siehe auch S'Width)


S'Width
Das Attribut S'Width ist für jeden skalaren Untertyp S gültig und bezeichnet die maximale Länge einer von S'Image zurückgegebenen Zeichenkette für alle Werte des Untertyps S.
Der Wert ist vom Typ universal_integer.
Für einen Untertyp mit leerem Bereich ist dieser Wert 0.

Beispiel:
type Farben is (rot, gruen, blau);
Farben'Width = 5, da Farben'Image(gruen) = "gruen"



S'Class'Write
Schreibt ein Objekt des Typs S'Class auf einen Stream. Für jeden Untertyp S'Class eines klassenweiten Typs T'Class bezeichnet S'Class'Write eine Prozedur mit der folgenden Spezifikation:

procedure S'Class'Write(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in T'Class)

Der Aufruf verzweigt zu dem Unterprogramm S'Write, das dem Typ T zugeordnet ist. Diese Funktion ist die Gegenfunktion zu S'Class'Read.


S'Write
Schreibt ein Objekt des Typs S auf einen Stream, wobei nur die Repräsentation dieses Objektes ausgegeben wird. Wenn es sich bei dem Objekt um ein unbegrenztes Objekt handelt, muß die Prozedur S'Output verwendet werden.
S'Write ist für jeden Typ vordefiniert und kann auf Wunsch durch eine eigene Ausgaberoutine ersetzt werden:

for subtype_name'Write use procedure_name;

S'Write bezeichnet eine Prozedur mit der folgenden Spezifikation:

procedure S'Write(
Stream : access Ada.Streams.Root_Stream_Type'Class;
Item : in S)


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.