From: "Steve" <nospam_steved94@comcast.net>
Subject: Re: Aliasing or referencing assignment
Date: Thu, 8 Sep 2005 19:13:20 -0700
Date: 2005-09-08T19:13:20-07:00 [thread overview]
Message-ID: <xOadnZ2dnZ09ygbbnZ2dnSNyvd6dnZ2dRVn-0J2dnZ0@comcast.com> (raw)
In-Reply-To: m3slwf3xcy.fsf@rr.trudgett
"David Trudgett" <wpower@zeta.org.au.nospamplease> wrote in message
news:m3slwf3xcy.fsf@rr.trudgett...
>
> 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
>
How about something like:
declare
C : ListElementType renames Self.List(Opponent_Win, Can_I_Play);
begin
... code that uses C ...
Append( C, To_Unbounded_String( "Blah blah" ) );
end;
Steve
(The Duck)
> 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 prev parent reply other threads:[~2005-09-09 2:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-09 0:20 Aliasing or referencing assignment David Trudgett
2005-09-09 2:13 ` Steve [this message]
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