From: mheaney@ni.net (Matthew Heaney)
Subject: Re: Equality operator overloading in ADA 83
Date: 1997/04/22
Date: 1997-04-22T00:00:00+00:00 [thread overview]
Message-ID: <mheaney-ya023680002204972052190001@news.ni.net> (raw)
In-Reply-To: 335CAEFE.35DC@elca-matrix.ch
In article <335CAEFE.35DC@elca-matrix.ch>, Mats.Weber@elca-matrix.ch wrote:
>> It took me a while to realize that, yes, even for types (without access
>> objects) that have a physical length greater than the logical length, you
>> can make the predefined equality work. This is true even for Ada 83, so
>> you may be able to apply this technique to your problem.
>
>Yes, but the performance penalty is pretty big and it's hard to find the
>bug if you forget the padding just once.
What are you saying? That one should stick with the full-type-tagged
technique, and not use the pad-with-extra-characters technique?
The performance penalty is nothing compared to the fact that equality
doesn't work. What's more important, program correctness or efficiency?
>
>GNAT 3.09 would fail, I just chacked: there is no padding of strings
>shorter than the max length. Making Max_Length a discriminant of a
>subcomponent of Bounded_String would solve the problem, probably better
>(at least cleaner) than padding with nulls.
But of course that solution would have a performance penalty too, right?
type Bounded_String is private;
private
subtype Length_Range is Natural range 0 .. Max_Length;
type Bounded_String (Length : Length_Range := 0) is
record
Buffer : String (1 .. Length);
end record;
end Bounded_Strings;
If I want to append characters to my string, that means I have to change
the value of the discriminant, and therefore must use aggregate assignment:
procedure Append (Str : String; To : in out Bounded_String) is
begin
To := (Length => To.Length + Str'Length, Buffer => To.Buffer & Str);
end Append;
Without the (hidden) discriminant, I can just append the string to what's
already there:
procedure Append (Str : String; To : in out Bounded_String) is
begin
To.Buffer (To.Length + 1 .. To.Length + Str'Length) := Str;
To.Length := To.Length + Str'Length;
end Append;
N'est-ce pas?
Matt
--------------------------------------------------------------------
Matthew Heaney
Software Development Consultant
<mailto:matthew_heaney@acm.org>
(818) 985-1271
next prev parent reply other threads:[~1997-04-22 0:00 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-04-21 0:00 Equality operator overloading in ADA 83 Manuel Wenger
1997-04-22 0:00 ` Mats Weber
1997-04-22 0:00 ` Matthew Heaney
1997-04-22 0:00 ` Mats Weber
1997-04-22 0:00 ` Robert A Duff
1997-04-22 0:00 ` Mats Weber
1997-04-22 0:00 ` Matthew Heaney
1997-04-23 0:00 ` Mats Weber
1997-04-23 0:00 ` Robert A Duff
1997-04-24 0:00 ` Mats Weber
1997-04-24 0:00 ` Robert A Duff
1997-04-24 0:00 ` Robert Dewar
1997-04-25 0:00 ` Robert A Duff
1997-04-26 0:00 ` Nick Roberts
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Matthew Heaney
1997-05-02 0:00 ` Nick Roberts
1997-05-04 0:00 ` Robert Dewar
1997-05-05 0:00 ` Mats Weber
1997-05-05 0:00 ` Robert Dewar
1997-05-06 0:00 ` Matthew Heaney
1997-05-06 0:00 ` Robert Dewar
1997-05-07 0:00 ` Tucker Taft
1997-05-05 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-27 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-28 0:00 ` Simon Wright
1997-04-29 0:00 ` Robert I. Eachus
1997-04-29 0:00 ` Mats Weber
1997-05-01 0:00 ` Robert Dewar
[not found] ` <01bc571c$01f3ffc0$5de2b8cd@p5120.bda>
1997-05-03 0:00 ` Robert Dewar
1997-04-27 0:00 ` Robert Dewar
1997-04-27 0:00 ` Fergus Henderson
1997-04-27 0:00 ` Robert Dewar
1997-04-28 0:00 ` Fergus Henderson
1997-04-28 0:00 ` Robert Dewar
1997-04-25 0:00 ` Kevin Cline
1997-04-25 0:00 ` Mats Weber
1997-04-27 0:00 ` Robert Dewar
1997-04-29 0:00 ` Mats Weber
1997-04-25 0:00 ` Mats Weber
1997-04-25 0:00 ` Robert Dewar
1997-04-29 0:00 ` Mats Weber
1997-05-01 0:00 ` Robert Dewar
1997-04-25 0:00 ` Robert A Duff
1997-04-25 0:00 ` Mats Weber
1997-04-27 0:00 ` Geert Bosch
1997-04-24 0:00 ` Matthew Heaney
1997-04-25 0:00 ` Robert Dewar
1997-04-25 0:00 ` Matthew Heaney
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Fergus Henderson
1997-04-26 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-27 0:00 ` Robert Dewar
1997-04-25 0:00 ` Robert Dewar
1997-04-25 0:00 ` Matthew Heaney
1997-04-26 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-28 0:00 ` Robert Dewar
1997-04-28 0:00 ` Robert Dewar
1997-04-29 0:00 ` Matthew Heaney
1997-05-01 0:00 ` Robert Dewar
1997-04-29 0:00 ` Mats Weber
1997-04-29 0:00 ` Robert A Duff
1997-04-29 0:00 ` Matthew Heaney
1997-05-02 0:00 ` Tucker Taft
1997-05-02 0:00 ` Robert Dewar
1997-05-02 0:00 ` Robert A Duff
1997-05-03 0:00 ` Robert Dewar
1997-05-01 0:00 ` Robert Dewar
1997-04-23 0:00 ` Robert Dewar
1997-04-24 0:00 ` Robert A Duff
1997-04-29 0:00 ` Mats Weber
1997-05-01 0:00 ` Robert Dewar
1997-04-24 0:00 ` Robert Dewar
1997-04-22 0:00 ` Matthew Heaney [this message]
1997-04-23 0:00 ` Mats Weber
1997-04-23 0:00 ` Robert A Duff
1997-04-25 0:00 ` Kevin Cline
1997-04-25 0:00 ` Matthew Heaney
1997-04-25 0:00 ` Robert A Duff
1997-04-25 0:00 ` Jon S Anthony
1997-04-27 0:00 ` Robert Dewar
1997-04-28 0:00 ` Robert I. Eachus
1997-04-29 0:00 ` Jon S Anthony
1997-04-26 0:00 ` Robert Dewar
1997-04-27 0:00 ` Matthew Heaney
1997-04-27 0:00 ` Robert A Duff
1997-04-25 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Matthew Heaney
1997-04-24 0:00 ` Robert Dewar
1997-04-24 0:00 ` Robert A Duff
1997-04-25 0:00 ` Robert Dewar
1997-04-25 0:00 ` Matthew Heaney
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Matthew Heaney
1997-04-27 0:00 ` Robert Dewar
1997-04-27 0:00 ` Robert A Duff
1997-04-26 0:00 ` Robert Dewar
1997-05-02 0:00 ` Nick Roberts
1997-05-04 0:00 ` Robert Dewar
1997-04-26 0:00 ` Robert Dewar
1997-04-26 0:00 ` Matthew Heaney
1997-04-27 0:00 ` Robert A Duff
1997-04-22 0:00 ` Philip Brashear
1997-04-22 0:00 ` Kevin Cline
1997-04-22 0:00 ` Mark A Biggar
1997-04-24 0:00 ` Keith Thompson
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox