From: David Trudgett <wpower@zeta.org.au.nospamplease>
Subject: Aliasing or referencing assignment
Date: Fri, 09 Sep 2005 10:20:45 +1000
Date: 2005-09-09T10:20:45+10:00 [thread overview]
Message-ID: <m3slwf3xcy.fsf@rr.trudgett> (raw)
I'm having a little difficulty with assign by reference and assign by
value (copy) semantics in a piece of code I'm working on. In the
chunk of code that follows below, I want to avoid repeating
"Self.List(Opponent_Win, Can_I_Play)" many times, and just replace it
with a variable name like "C".
"Self.List(Opponent_Win, Can_I_Play)" returns a Charles container
library Vector of Unbounded_String. The assignment:
C := Self.List(Opponent_Win, Can_I_Play); -- "List" is 2D array
is ineffective in doing what I want because it is doing a value
copy. I've tried to turn the type definition of "C" into an access
type, but with no success. I also tried the "To_Access" function (in
charles.vectors.unbounded), but that returns a reference to an
"Element_Array" and not a Container_Type with which I can use
"Append".
Anyway, here is the code:
procedure Initialize (Self : in out Comments)
is
C : String_List.Container_Type;
package Random_Integer is new Ada.Numerics.Discrete_Random(Integer);
use Random_Integer;
G : Generator;
begin
Reset(G);
Ada.Numerics.Float_Random.Reset(Self.PRNG, Random(G));
-- OPPONENT WIN COMMENTS
-- Can I Play difficulty
C := Self.List(Opponent_Win, Can_I_Play);
Append
(C, To_Unbounded_String
("You're too good for me"));
Append
(C, To_Unbounded_String
("How did you manage that?"));
... and so on.
That works if I then finish with:
Self.List(Opponent_Win, Can_I_Play) := C;
But that's copy overhead I want to avoid (fifteen times, what's
more). For the time being, I've just replaced all of the "C"s in the
Append procedure calls with "Self.List(Opponent_Win, Can_I_Play)" (and
variations thereof further down).
How can I make "C" act like a reference to the Unbounded_String Vector?
Also, is the 'To_Unbounded_String("this is a string")' really
necessary? I thought I read in the ARM that string literals were
defined for all the string types.
Thanks,
David
P.S.
Later on, I will probably read these comments from an XML file, but
for now I'm just hard coding them into the program.
--
David Trudgett
http://www.zeta.org.au/~wpower/
FORTH IF HONK THEN
next reply other threads:[~2005-09-09 0:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-09 0:20 David Trudgett [this message]
2005-09-09 2:13 ` Aliasing or referencing assignment Steve
2005-09-09 7:33 ` David Trudgett
2005-09-09 15:40 ` Jeffrey Carter
2005-09-10 7:38 ` David Trudgett
2005-09-10 10:01 ` Martin Dowie
2005-09-10 10:33 ` David Trudgett
2005-09-10 11:28 ` Ludovic Brenta
2005-09-11 20:43 ` David Trudgett
2005-09-11 3:20 ` Jeffrey R. Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox