comp.lang.ada
 help / color / mirror / Atom feed
From: Matthew Heaney <mheaney@on2.com>
Subject: Re: Containers - nontrivial element access
Date: Thu, 04 Oct 2007 07:01:15 -0700
Date: 2007-10-04T07:01:15-07:00	[thread overview]
Message-ID: <1191506475.115935.221440@w3g2000hsg.googlegroups.com> (raw)
In-Reply-To: <4704e442$0$30370$9b4e6d93@newsspool4.arcor-online.net>

On Oct 4, 9:01 am, Georg Bauhaus <rm.tsoh+bauh...@maps.futureapps.de>
wrote:
> Why not strive for something like
>
>    swap_salary(c1, c2);
> where
>    c1, c2: Cursor;
>
> As these all are implementation level thoughts, inviting
> proper information hiding in place of hinting to mechanisms
> in function names (swap), IMHO.


Right, and you can generalize that further:

generic
   with package VT is new Vectors (<>);
   with procedure Process (I, J : VT.Element_Type);
procedure Generic_Update_Elements_By_Index
  (V    : in out Vector;
   I, J : in VT.Index_Type);


procedure Generic_Update_Elements_By_Index
  (V    : in out Vector;
   I, J : in VT.Index_Type)
is
   procedure Process_I (EI : in out ET) is
      procedure Process_J (EJ : in out ET) is
      begin
         Process (EI, EJ);
      end;
   begin
      V.Update_Element (J, Process_J'Access);
   end;
begin
   V.Update_Element (I, Process_I'Access);
end Generic_Update_Elements_By_Index;


So now you can say:

procedure Swap_Salary (I, J : in out Person) is
   S : constant Salary_Type := I.Salary;
begin
   I.Salary := J.Salary;
   J.Salary := S;
end;

procedure Swap_Salary is
  new Generic_Update_Elements_By_Index
   (People_Vectors.Vector_Type,
    Swap_Salary);

V : Vector;

Swap_Salary (V, I, J);




  reply	other threads:[~2007-10-04 14:01 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-01 21:55 Containers - nontrivial element access Maciej Sobczak
2007-10-01 23:52 ` Alex R. Mosteo
2007-10-02 16:40   ` Matthew Heaney
2007-10-02 23:16     ` Alex R. Mosteo
2007-10-02 20:47   ` Maciej Sobczak
2007-10-02 23:23     ` Alex R. Mosteo
2007-10-02  0:39 ` Jeffrey R. Carter
2007-10-02 16:44   ` Matthew Heaney
2007-10-03  0:20     ` Jeffrey R. Carter
2007-10-03 19:40       ` Maciej Sobczak
2007-10-03 19:56         ` Matthew Heaney
2007-10-03 20:21           ` Dmitry A. Kazakov
2007-10-03 22:37             ` Matthew Heaney
2007-10-04  8:06               ` Dmitry A. Kazakov
2007-10-03 22:02         ` Jeffrey R. Carter
2007-10-04  0:16         ` Robert A Duff
2007-10-07  8:41           ` Jacob Sparre Andersen
2007-10-11 19:15             ` Robert A Duff
2007-10-14  4:59               ` Jacob Sparre Andersen
2007-10-14  7:24                 ` Dmitry A. Kazakov
2007-10-14 13:49                   ` Georg Bauhaus
2007-10-14 15:07                     ` Dmitry A. Kazakov
2007-10-02 20:50   ` Maciej Sobczak
2007-10-03  0:22     ` Jeffrey R. Carter
2007-10-03  8:26       ` Dmitry A. Kazakov
2007-10-03 18:49         ` Jeffrey R. Carter
2007-10-03 19:09           ` Matthew Heaney
2007-10-03 19:15           ` Simon Wright
2007-10-03 19:48             ` Maciej Sobczak
2007-10-03 19:58             ` Matthew Heaney
2007-10-03 19:35           ` Dmitry A. Kazakov
2007-10-02  2:34 ` Randy Brukardt
2007-10-02 16:47   ` Matthew Heaney
2007-10-02  7:23 ` Dmitry A. Kazakov
2007-10-02 16:37 ` Matthew Heaney
2007-10-02 21:02   ` Maciej Sobczak
2007-10-02 22:20     ` Matthew Heaney
2007-10-03 19:59       ` Maciej Sobczak
2007-10-03 22:55         ` Matthew Heaney
2007-10-04  0:22         ` Robert A Duff
2007-10-04 13:01         ` Georg Bauhaus
2007-10-04 14:01           ` Matthew Heaney [this message]
2007-10-04 21:58           ` Matthew Heaney
replies disabled

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