From: Gautier <gautier@fakeaddress.nil>
Subject: Re: Limited_Controlled and constructor functions
Date: Sat, 20 Jan 2007 20:39:40 +0100
Date: 2007-01-20T20:39:40+01:00 [thread overview]
Message-ID: <45b27de9_6@news.bluewin.ch> (raw)
In-Reply-To: <45b24cbd$1_6@news.bluewin.ch>
Oh, and a version without implicit dynamic allocation at all:
--8<-----------8<-----------8<-----------8<-----------8<-----------8<---------
pragma Ada_83;
with Text_IO, Variant_pkg;
procedure Variants is
use Variant_pkg;
P : constant Params := (Param("Hello"),
Param("Ada"),
Param(12),
Param(3.14));
begin
for i in P'Range loop
Text_IO.Put_Line(
"Parameter #" & Integer'Image(i) & ": [" & Image(P(i)) & ']'
);
end loop;
end Variants;
--8<-----------8<-----------8<-----------8<-----------8<-----------8<---------
package Variant_pkg is
type BorString( maxlength: Positive ) is record
length: Natural:= 0;
s: String( 1..maxlength );
end record;
type Kind is (A_String, An_Integer, A_Float);
xamax: constant:= 1024;
type Atom(k: Kind:= An_Integer) is record
case k is
when A_String => s: BorString(xamax);
when An_Integer => i: Integer;
when A_Float => f: Float;
end case;
end record;
type Params is array(Positive range <>) of Atom;
function Param(s: String) return Atom;
function Param(i: Integer) return Atom;
function Param(f: Float) return Atom;
function Image(a: Atom) return String;
end Variant_pkg;
--8<-----------8<-----------8<-----------8<-----------8<-----------8<---------
package body Variant_pkg is
function Param(s: String) return Atom is
a: Atom(A_String);
begin
a.s.s(1..s'Length):= s;
a.s.length:= s'Length;
return a;
end Param;
function Param(i: Integer) return Atom is
begin
return Atom'(k => An_Integer, i => i);
end Param;
function Param(f: Float) return Atom is
begin
return Atom'(k => A_Float, f => f);
end Param;
function Image(a: Atom) return String is
begin
case a.k is
when A_String => return a.s.s(1..a.s.length);
when An_Integer => return Integer'Image(a.i);
when A_Float => return Float'Image(a.f);
end case;
end Image;
end Variant_pkg;
prev parent reply other threads:[~2007-01-20 19:39 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-18 9:51 Limited_Controlled and constructor functions Maciej Sobczak
2007-01-18 12:13 ` AW: " Grein, Christoph (Fa. ESG)
2007-01-18 16:41 ` Robert A Duff
2007-01-19 7:58 ` Maciej Sobczak
2007-01-19 9:41 ` Dmitry A. Kazakov
2007-01-19 13:45 ` Maciej Sobczak
2007-01-19 14:33 ` Dmitry A. Kazakov
2007-01-22 8:59 ` Maciej Sobczak
2007-01-20 17:09 ` Gautier
2007-01-20 19:39 ` Gautier [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox