From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: [Newbie] doubly constrained array, dumb question
Date: Mon, 26 Feb 2018 17:26:12 -0600
Date: 2018-02-26T17:26:12-06:00 [thread overview]
Message-ID: <p7252l$ros$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p71rvj$vgh$1@gioia.aioe.org
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1562 bytes --]
"J-P. Rosen" <rosen@adalog.fr> wrote in message
news:p71rvj$vgh$1@gioia.aioe.org...
> Le 26/02/2018 à 17:26, Mehdi Saada a écrit :
>> Hello.
>>
>> I would like an constrained String subtype with narrower bounds that
>> Positive'Range.
>> How can I do something like:
>> subtype Possible_Length is NATURAL range 1..80;
>> subtype T_Line is String (Possible_Length range <>);
>> ? I know "range <>" isn't included in the definition of
>> "range_constraint". How can I express the same thing.
>> So that I can get after, a dynamic string with:
>> A: access T_LINE := new T_LINE'("BLABLABLA"); while checking for its
>> range.
>>
> You can't do that, because a subtype can't be both constrained and
> unconstrainde at the same time...
>
> OTOH, you can define your own string type:
> type Short_String is array (Possible_length range <>) of character;
Or you could use a subtype with a dynamic predicate:
subtype Short_String is String
with Dynamic_Predicate => Short_String'First >= Possible_Length'First
and Short_String'Last <= Possible_Length'Last;
This would be checked any time that you convert a string value into a
Short_String subtype (explicitly or implicitly), so it probably would give
the right effect. Note that unlike a real constraint, it wouldn't have any
effect on other subtypes, so:
Silly_Object : Short_String (1..100);
would not raise Constraint_Error, but any attempt to assign into it would
raise Assertion_Error. (Assuming the Assertion_Policy is Check, it isn't for
GNAT by default.)
Randy.
next prev parent reply other threads:[~2018-02-26 23:26 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-26 16:26 [Newbie] doubly constrained array, dumb question Mehdi Saada
2018-02-26 17:02 ` J-P. Rosen
2018-02-26 21:40 ` Dmitry A. Kazakov
2018-02-26 23:26 ` Randy Brukardt [this message]
2018-02-27 9:01 ` Simon Wright
2018-02-27 22:11 ` Randy Brukardt
2018-02-26 20:52 ` Niklas Holsti
2018-02-27 1:29 ` Mehdi Saada
2018-02-27 9:18 ` Dmitry A. Kazakov
2018-02-27 11:43 ` Mehdi Saada
2018-02-27 14:19 ` Dmitry A. Kazakov
2018-02-27 17:08 ` G. B.
2018-02-27 17:37 ` Dmitry A. Kazakov
2018-02-27 14:34 ` Jere
2018-02-27 15:13 ` Dmitry A. Kazakov
2018-02-27 7:38 ` Jacob Sparre Andersen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox