comp.lang.ada
 help / color / mirror / Atom feed
* Containers - nontrivial element access
@ 2007-10-01 21:55 Maciej Sobczak
  2007-10-01 23:52 ` Alex R. Mosteo
                   ` (4 more replies)
  0 siblings, 5 replies; 43+ messages in thread
From: Maciej Sobczak @ 2007-10-01 21:55 UTC (permalink / raw)


I was thinking recently about what is wrong with the containers
interface. ;-)

Consider the following problem:
There is a record type (for example Person) with a couple of fields
(for example Salary) that together make the whole a bit heavy, so that
unnecessary copying of the whole is to be avoided. Objects of this
type are stored in the container.

I would like to swap salaries of two guys which I can refer with the
index/iterator/cursor/etc. The reference method is not really
important - what is important is the problem of modifying more than
one element in the container.

C++ example is easy:

vector<Person> people;
// ...
swap(people[x].salary, people[y].salary);

I hope it is obvious what it does (suppose x and y are some indices
into the vector). Just in case it isn't - all the components of the
two records stay intact except the salary, which is swapped between
the two. C++ makes it possible by explicitly returning a reference
from the method that accesses the element.

What would you suggest as the Ada solution for this problem?

The Update_Element procedure with its access to the user-provided
modifying procedure requires to pass data "under the table" (like with
a separate variable declared aside the modifying procedure) - and
seems to be just clunky. Is this the only possibility?

--
Maciej Sobczak * www.msobczak.com * www.inspirel.com




^ permalink raw reply	[flat|nested] 43+ messages in thread

end of thread, other threads:[~2007-10-14 15:07 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2007-10-04 21:58           ` Matthew Heaney

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