comp.lang.ada
 help / color / mirror / Atom feed
From: NiGHTS <nights@unku.us>
Subject: Re: Strings with discriminated records
Date: Sun, 27 May 2018 07:34:45 -0700 (PDT)
Date: 2018-05-27T07:34:45-07:00	[thread overview]
Message-ID: <71501ba6-766e-45df-927b-0ed908fba28e@googlegroups.com> (raw)
In-Reply-To: <pedqs5$1oda$1@gioia.aioe.org>

On Sunday, May 27, 2018 at 4:39:36 AM UTC-4, Dmitry A. Kazakov wrote:
> On 2018-05-27 03:42, NiGHTS wrote:
> > On Saturday, May 26, 2018 at 7:42:22 PM UTC-4, Shark8 wrote:
> >> You can do this:
> >>
> >> Type Message(Length : Positive) is record
> >>    Text  :  String(1..Length);
> >>    -- Other components.
> >> end record;
> > 
> > More interesting to me would be to pass a string literal as a discriminant. Using your example, something like this...
> > 
> > Type Message (Length : Positive; Text_Value : String) is record
> >    Text  :  String(1..Length) := Text_Value;
> >    -- Other components.
> > end record;
> > 
> > This gives me an error: Discriminants must must have a discrete or access type
> 
> There is no constructors and no user-defined aggregates, which you are 
> actually asking for, but sometimes a constructing function does the job:
> 
>     function Create (Value : String) return Message is
>     begin
>        return (Length => Value'Length, Text => Value);
>     end Create;
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

This is actually a good solution to me. I use this kind of technique often but not in the context of strings, so I find this an elegant way to solve my problem. Here is the final code for anyone who want to see it.

Type Message (Length : Positive) is record
    Text  :  String (1 .. Length);
end record; 
        
function Create (Value : String) return Message is
begin
    return (Length => Value'Length, Text => Value);
end Create;
        
M : Message := Create ("Hello World");


  parent reply	other threads:[~2018-05-27 14:34 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-26 21:43 Strings with discriminated records NiGHTS
2018-05-26 23:42 ` Shark8
2018-05-27  1:42   ` NiGHTS
2018-05-27  8:39     ` Dmitry A. Kazakov
2018-05-27 12:22       ` Mehdi Saada
2018-05-27 12:40         ` Dmitry A. Kazakov
2018-05-27 14:34       ` NiGHTS [this message]
2018-05-27 14:50         ` Dmitry A. Kazakov
2018-05-27 15:19           ` NiGHTS
2018-05-27 15:32             ` AdaMagica
2018-05-27 16:22               ` NiGHTS
2018-05-29 22:31           ` Randy Brukardt
2018-05-30  7:29             ` Dmitry A. Kazakov
2018-05-30 20:11               ` Randy Brukardt
2018-05-27 12:48     ` Mehdi Saada
2018-05-27 13:03       ` Dmitry A. Kazakov
2018-05-27 17:11 ` NiGHTS
2018-05-27 18:07   ` Simon Wright
2018-05-27 23:08     ` NiGHTS
2018-05-28  1:44       ` Jere
2018-05-28  3:05         ` NiGHTS
2018-05-28  3:23           ` NiGHTS
2018-05-27 18:25   ` Dmitry A. Kazakov
2018-05-27 22:44     ` NiGHTS
2018-05-28  7:29       ` Dmitry A. Kazakov
2018-05-28  7:42       ` Simon Wright
2018-05-28 18:38         ` Shark8
2018-05-28 21:15           ` Mehdi Saada
2018-05-28 21:48             ` Shark8
2018-05-28 22:27               ` Mehdi Saada
2018-05-28 23:59                 ` Shark8
2018-05-29  0:41                   ` Dan'l Miller
2018-05-30 17:11                     ` Shark8
2018-05-29  7:49                 ` Dmitry A. Kazakov
2018-05-29  9:31                   ` AdaMagica
2018-05-29 10:14                     ` Dmitry A. Kazakov
2018-05-29 13:40                   ` Dan'l Miller
2018-05-29 14:04                     ` Dmitry A. Kazakov
2018-05-29 22:41                       ` Randy Brukardt
2018-05-30  5:00                         ` J-P. Rosen
2018-05-30 20:09                           ` Randy Brukardt
2018-05-31  4:19                             ` J-P. Rosen
2018-05-31 22:18                               ` Randy Brukardt
2018-06-01 13:35                                 ` Dan'l Miller
2018-06-01 15:20                                   ` Dmitry A. Kazakov
2018-05-28 13:55 ` NiGHTS
2018-05-29 14:37 ` Mehdi Saada
2018-05-29 22:44   ` Randy Brukardt
2018-05-29 22:41 ` Mehdi Saada
2018-05-30 19:46   ` Randy Brukardt
2018-05-30 19:48     ` 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