From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00, PP_MIME_FAKE_ASCII_TEXT autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!nntp-feed.chiark.greenend.org.uk!ewrotcd!newsfeed.xs3.de!io.xs3.de!news.jacob-sparre.dk!franka.jacob-sparre.dk!pnx.dk!.POSTED.rrsoftware.com!not-for-mail From: "Randy Brukardt" Newsgroups: comp.lang.ada Subject: Re: [Newbie] doubly constrained array, dumb question Date: Mon, 26 Feb 2018 17:26:12 -0600 Organization: JSA Research & Innovation Message-ID: References: <62f83fe5-15d6-41cf-952f-bc3cb077d42f@googlegroups.com> Injection-Date: Mon, 26 Feb 2018 23:26:13 -0000 (UTC) Injection-Info: franka.jacob-sparre.dk; posting-host="rrsoftware.com:24.196.82.226"; logging-data="28444"; mail-complaints-to="news@jacob-sparre.dk" X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.7246 Xref: reader02.eternal-september.org comp.lang.ada:50671 Date: 2018-02-26T17:26:12-06:00 List-Id: "J-P. Rosen" 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.