comp.lang.ada
 help / color / mirror / Atom feed
From: "Frank J. Lhota" <NOSPAM.lhota.adarose@verizon.net>
Subject: Re: A simple ADA puzzle (I haven't the answer)
Date: Wed, 16 Jun 2004 16:21:26 GMT
Date: 2004-06-16T16:21:26+00:00	[thread overview]
Message-ID: <as_zc.37108$Xw3.21935@nwrdny03.gnilink.net> (raw)
In-Reply-To: dRZzc.40593$G%.26441@tornado.fastwebnet.it

The problem with your definition of String_Type is that an unconstrained
object of this type would require an outrageous amount of memory. Assume
that we declare:

    My_Name : STRING_TYPE;

Since My_Name is unconstrained, we can assign any STRING_TYPE value to
My_Name, including

    My_Name := STRING_TYPE'( Len => Integer'Last, String => ( others => '
' ) );

So even though My_Name.Len is initially 0, My_Name must be allocated enough
space to contain the largest object of STRING_TYPE. Frankly, I'd be
surprised if there was space for one such object. There is nothing
surprising about getting some sort of error when declaring an array of 3
unconstrained objects of type STRING_TYPE, although Storage_Error should
have been raised instead of Constraint_Error.

The right way to fix this depends on one question: is there a reasonable
upper bound to the length of the Len discriminant?

----------------------------------------

If  there is a reasonable upper limit on the LEN discriminant, say 100, we
can constrain the LEN component as follows:

  type LEN_TYPE is array (INTEGER range <>)
    of CHARACTER;


  subtype STRING_LEN is INTEGER range 0 .. 100;

  type STRING_TYPE (LEN : STRING_LEN := 0) is
    record
      STRING : LEN_TYPE (1 .. LEN);
    end record;

With these declararations, LEN is constrained to be no larger than 100. You
can now declare an unconstrained object of type STRING_TYPE without
requiring ridiculous amounts of space.

----------------------------------------

If  there is no reasonable upper limit on the LEN discriminant, if say LEN
can vary from 1 to hundreds of thousands, then the best solution would be to
use an array of pointers. This would be the only reasonable way to create an
array of objects of widely varying sizes. For example:

  type LEN_TYPE is array (INTEGER range <>)
    of CHARACTER;

  type STRING_TYPE (LEN : INTEGER := 0) is
    record
      STRING : LEN_TYPE (1 .. LEN);
    end record;

  type STRING_ACC is access all STRING_TYPE;
  procedure Deallocate is
     new Ada.Unchecked_Deallocation( STRING_TYPE, STRING_ACC );

  type UNC2_ARRAY_TYPE is array (INTEGER range <>)
    of STRING_ACC;

This solution does require that the array component values be allocated (and
deallocated once you are finished with them), but it does allow you to make
a table of STRING_TYPE values that take on the full range of LEN
discriminants.





  reply	other threads:[~2004-06-16 16:21 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-16 15:40 A simple ADA puzzle (I haven't the answer) Abby
2004-06-16 16:21 ` Frank J. Lhota [this message]
2004-06-16 16:26   ` Abby
2004-06-16 17:01     ` Frank J. Lhota
2004-06-16 17:18       ` Martin Krischik
2004-06-17  6:57         ` Brian May
2004-06-17 12:44         ` Frank J. Lhota
2004-06-16 17:58     ` Jeffrey Carter
2004-06-23 21:14       ` Randy Brukardt
2004-06-16 19:51     ` Simon Wright
2004-06-16 17:56   ` Jeffrey Carter
2004-06-16 22:25     ` Martin Dowie
2004-06-17  0:41       ` Jeffrey Carter
2004-06-17  7:45         ` Martin Dowie
2004-06-17 14:20     ` Frank J. Lhota
2004-06-18 18:07     ` Wojtek Narczynski
2004-06-18 18:37       ` Frank J. Lhota
2004-06-19  2:11         ` Brian May
2004-06-19 11:25         ` Wojtek Narczynski
2004-06-19  1:27       ` Jeffrey Carter
2004-06-19 11:17         ` Wojtek Narczynski
2004-06-16 18:31   ` Hyman Rosen
2004-06-16 20:16     ` Frank J. Lhota
2004-06-16 21:05       ` Hyman Rosen
2004-06-17 13:26         ` Frank J. Lhota
2004-06-17 14:19           ` Hyman Rosen
2004-06-17 15:24             ` Frank J. Lhota
2004-06-23 21:27               ` Randy Brukardt
2004-06-17 19:17           ` Georg Bauhaus
2004-06-16 22:48     ` Alexander E. Kopilovich
2004-06-17 10:25       ` Björn Persson
2004-06-17 14:33         ` Frank J. Lhota
2004-06-17 23:15           ` Alexander E. Kopilovich
2004-06-23 21:30           ` Randy Brukardt
2004-06-17  8:06     ` Dmitry A. Kazakov
2004-06-17 12:19       ` Hyman Rosen
2004-06-17 14:16         ` Dmitry A. Kazakov
2004-06-17 14:17           ` Hyman Rosen
2004-06-17 22:51           ` Brian May
2004-06-18  7:50             ` Dmitry A. Kazakov
2004-06-18 12:32               ` Hyman Rosen
2004-06-18  9:14           ` Ole-Hjalmar Kristensen
2004-06-18 12:24             ` Hyman Rosen
2004-06-18 12:41             ` Dmitry A. Kazakov
2004-06-18 13:16               ` Hyman Rosen
2004-06-18 14:01                 ` Dmitry A. Kazakov
2004-06-18 16:14                   ` Hyman Rosen
2004-06-19  9:31                     ` Dmitry A. Kazakov
2004-06-21  3:30                       ` Hyman Rosen
2004-06-21  8:16                         ` Dmitry A. Kazakov
2004-06-21 16:32                           ` Hyman Rosen
2004-06-22  2:19                             ` David Starner
2004-06-22 13:03                               ` Frank J. Lhota
2004-06-23 21:37                           ` Randy Brukardt
2004-06-24  8:39                             ` Dmitry A. Kazakov
2004-06-24 20:53                               ` Randy Brukardt
2004-06-25  8:24                                 ` Dmitry A. Kazakov
2004-06-25 17:37                                   ` Randy Brukardt
2004-06-26  7:55                                     ` Dmitry A. Kazakov
2004-06-29  0:08                                       ` Randy Brukardt
2004-06-29  9:32                                         ` Dmitry A. Kazakov
2004-06-29 18:36                                           ` Randy Brukardt
2004-06-23 21:21     ` Randy Brukardt
2004-06-24  1:03       ` Jeffrey Carter
2004-06-24 15:19       ` Frank J. Lhota
2004-06-24 16:04         ` Ed Falis
2004-06-24 21:04           ` Randy Brukardt
2004-06-25 15:30             ` Frank J. Lhota
2004-06-25 18:16               ` Bob Spooner
2004-06-25 19:23                 ` Frank J. Lhota
2004-06-26 15:26                   ` Robert I. Eachus
2004-06-28  4:52                     ` Steve
2004-07-04 19:06                       ` Robert I. Eachus
2004-06-29  0:03                 ` Randy Brukardt
2004-06-24 21:00         ` Randy Brukardt
2004-06-16 16:49 ` Martin Krischik
2004-06-17 10:58   ` Björn Persson
2004-06-17  3:48 ` Steve
2004-06-17 10:39   ` Björn Persson
  -- strict thread matches above, loose matches on Subject: below --
2004-06-17  8:38 Christoph Karl Walter Grein
2004-06-23 21:43 ` 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