comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: Getting the index for an element in mutually referencing containers
Date: Sun, 12 Mar 2017 16:44:08 +0000
Date: 2017-03-12T16:44:08+00:00	[thread overview]
Message-ID: <ly60jebg2v.fsf@pushface.org> (raw)
In-Reply-To: oa3cuo$ej0$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:

> On 2017-03-12 12:30, Simon Wright wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
>>
>>> On 2017-03-11 22:46, Simon Wright wrote:
>>
>>>> Basically, I (Simon, now) am having trouble thinking of an
>>>> application where reference counting would be an appropriate
>>>> solution.
>>>
>>> As I said, in practice it is all cases when you would have a
>>> container of mutable elements.
>>
>> I had some trouble understanding your point the first time, and
>> skipped over it (sorry).
>>
>> What's the opposite of "mutable"? constant? because, if so, why
>> wouldn't I use Update_Element?
>
> Yes, But it is almost never element update. Usually what you want is
> to call some mutable operations on the element. The language does not
> offer user-defined by-reference or copy-out-copy-in methods to element
> access.

with Ada.Containers.Vectors;
package Mutable_Elements is
   type Element is record
      Numeral : Integer := 0;
   end record;
   procedure Update (E : in out Element);
   package Element_Vectors is new Ada.Containers.Vectors
     (Index_Type => Positive,
      Element_Type => Element);
   Elements : Element_Vectors.Vector;
end Mutable_Elements;

package body Mutable_Elements is
   procedure Update (E : in out Element) is
   begin
      E.Numeral := E.Numeral + 1;
   end Update;
end Mutable_Elements;

with Ada.Text_IO;
with Mutable_Elements;
procedure Mutable_Elements_Test is
   use Mutable_Elements;
begin
   for J in 1 .. 5 loop
      Elements.Append (Element'(Numeral => J));
   end loop;
   
   Elements (4).Numeral := Elements (4).Numeral + 1;
   Ada.Text_IO.Put_Line ("Elements (4).Numeral: "
                           & Elements (4).Numeral'Img);
                           
   Update (Elements (4));
   Ada.Text_IO.Put_Line ("Elements (4).Numeral: "
                           & Elements (4).Numeral'Img);
end Mutable_Elements_Test;

$ ./mutable_elements_test 
Elements (4).Numeral:  5
Elements (4).Numeral:  6


  reply	other threads:[~2017-03-12 16:44 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-09 13:45 Getting the index for an element in mutually referencing containers Mart van de Wege
2017-03-09 15:25 ` Egil H H
2017-03-09 15:45   ` Mart van de Wege
2017-03-09 16:02     ` Mart van de Wege
2017-03-09 16:11     ` Egil H H
     [not found] ` <ly7f3xedp4.fsf@pushface.org>
     [not found]   ` <86k27xpikd.fsf@gaheris.avalon.lan>
     [not found]     ` <lywpbxc9my.fsf@pushface.org>
     [not found]       ` <86wpbxneuz.fsf@gaheris.avalon.lan>
     [not found]         ` <o9vcbp$t0t$1@franka.jacob-sparre.dk>
2017-03-11  6:45           ` Mart van de Wege
2017-03-11  8:40           ` Simon Wright
2017-03-11  8:58             ` Dmitry A. Kazakov
2017-03-11 11:21               ` Simon Wright
2017-03-11 14:18                 ` Dmitry A. Kazakov
2017-03-11 20:05                   ` Simon Wright
2017-03-11 20:52                     ` Dmitry A. Kazakov
2017-03-11 21:46                       ` Simon Wright
2017-03-11 22:37                         ` Niklas Holsti
2017-03-12  8:22                           ` Simon Wright
2017-03-12  9:38                             ` G.B.
2017-03-12 11:21                               ` Simon Wright
2017-03-13 10:29                             ` Alejandro R. Mosteo
2017-03-12  8:20                         ` Dmitry A. Kazakov
2017-03-12 11:30                           ` Simon Wright
2017-03-12 11:55                             ` Dmitry A. Kazakov
2017-03-12 16:44                               ` Simon Wright [this message]
2017-03-12 17:42                                 ` Dmitry A. Kazakov
2017-03-13 19:55                                   ` Randy Brukardt
2017-03-13 20:53                                     ` Dmitry A. Kazakov
2017-03-14 20:40                                       ` Randy Brukardt
2017-03-15  8:44                                         ` Dmitry A. Kazakov
2017-03-15 20:12                                           ` Randy Brukardt
2017-03-16  2:59                                             ` Paul Rubin
2017-03-16  9:04                                             ` Dmitry A. Kazakov
2017-03-13 23:25                                   ` Simon Wright
2017-03-14  8:25                                     ` Dmitry A. Kazakov
2017-03-12  1:36             ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox