From: "Yannick Duchêne (Hibou57)" <yannick_duchene@yahoo.fr>
Subject: Re: Processing array subsections, a newbie question.
Date: Sat, 12 Jun 2010 21:38:50 +0200
Date: 2010-06-12T21:38:50+02:00 [thread overview]
Message-ID: <op.vd7cu0xdule2fv@garhos> (raw)
In-Reply-To: 4c13db30$0$2391$4d3efbfe@news.sover.net
Le Sat, 12 Jun 2010 21:11:33 +0200, Peter C. Chapin <pcc482719@gmail.com>
a écrit:
> Ok : Boolean := True;
> Index_Fst : Natural := Buffer'First;
> Index_Lst : Natural;
> ...
>
> while Ok and Index_Fst <= Buffer'Last loop
> Do_Something(Buffer, Index_Fst, Index_Lst, Ok);
> Index_Fst := Index_Lst + 1;
> end loop;
>
> The problem with this code is that the assignment to Index_Fst inside
> the loop
> might raise Constraint_Error if Index_Lst = Buffer'Last after
> Do_Something
I know this, this is a very common problem too me : I simply use an “exit
when not Condition” before the increment. This requires a little redesign,
like wrapping the look in a “if Condition then”.
Sometime, to have something clean from the logical point of view, you must
have something which is “less” visually clean... or I would better say,
less short and more explicitly handles some cases which are merged
otherwise.
Do you think this idea is good enough ? Does it match your requirements ?
--
There is even better than a pragma Assert: a SPARK --# check.
--# check C and WhoKnowWhat and YouKnowWho;
--# assert Ada;
-- i.e. forget about previous premises which leads to conclusion
-- and start with new conclusion as premise.
next prev parent reply other threads:[~2010-06-12 19:38 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-12 19:11 Processing array subsections, a newbie question Peter C. Chapin
2010-06-12 19:38 ` Yannick Duchêne (Hibou57) [this message]
2010-06-12 19:41 ` Yannick Duchêne (Hibou57)
2010-06-12 20:54 ` Ludovic Brenta
2010-06-13 1:20 ` Gene
2010-06-13 14:01 ` Peter C. Chapin
2010-06-13 15:48 ` Yannick Duchêne (Hibou57)
2010-06-13 16:57 ` Phil Thornley
2010-06-13 18:39 ` Yannick Duchêne (Hibou57)
2010-06-13 19:04 ` Phil Thornley
2010-06-13 18:58 ` Peter C. Chapin
2010-06-13 6:28 ` Niklas Holsti
2010-06-13 6:54 ` Jeffrey R. Carter
2010-06-16 19:03 ` Niklas Holsti
2010-06-16 19:22 ` Ludovic Brenta
2010-06-13 14:09 ` Peter C. Chapin
2010-06-13 11:00 ` Stephen Leake
2010-06-13 11:04 ` Simon Wright
2010-06-14 1:45 ` Stephen Leake
2010-06-14 18:23 ` Colin Paul Gloster
2010-06-14 19:41 ` Simon Wright
2010-06-14 23:54 ` Peter C. Chapin
2010-06-15 3:28 ` Jeffrey R. Carter
2010-06-15 6:13 ` Simon Wright
2010-06-15 11:24 ` Peter C. Chapin
2010-06-15 9:45 ` Phil Thornley
2010-06-15 11:27 ` Peter C. Chapin
2010-06-15 12:11 ` Yannick Duchêne (Hibou57)
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox