comp.lang.ada
 help / color / mirror / Atom feed
From: Anh Vo <anhvofrcaus@gmail.com>
Subject: Re: My bug or else regarding Visibility Rules
Date: Wed, 3 Apr 2013 16:21:47 -0700 (PDT)
Date: 2013-04-03T16:21:47-07:00	[thread overview]
Message-ID: <55c932fa-73a4-4999-a913-71d0d8ff4782@googlegroups.com> (raw)
In-Reply-To: <lysj38hen1.fsf@pushface.org>

On Tuesday, April 2, 2013 1:16:34 PM UTC-7, Simon Wright wrote:
> Anh Vo <anhvofrcaus@gmail.com> writes: > On Tuesday, April 2, 2013 1:26:12 AM UTC-7, Simon Wright wrote: > Other recipients: > Anh Vo <anhvo...@gmail.com> writes: 

>> It is dangerous make internal data visible in this case. after careful 
>> consideration, I decided to take away part of the post-conditions 
>> rather than exposing them. Following the philosophy of Ada, I would 
>> not leave any possibilities for the clients to accidently mess it up 
>> (not allowing clients to shoot themselve in the foot) 

> I think that part of your difficulty is that your Queue is implemented 
> using(effectively) global objects (Buffer, In_Index etc). 

Actually, it is my intention to design this way. I believe it is called singleton form. I could have designed Queue type as well, as you suggested. 

> then you could say something like 
>
>   procedure Put (Q : in out Queue; Item : Element) 
>     with Pre => not Queue_Full (Q'Old), 
>          Post => Item_Added (Q'Old, Q, Item); 

I believe that attribute 'Old is allowed in post-conditions only. 

> with public 
>
>   function Item_Added (Old, Current : Queue; Item : Element) return Boolean; 
>
>and private 
>
>   function Item_Added 
>     (Old, Current : Queue; Item : Element) return Boolean is 
>      ((Current.In_Index = (Old.In_Index + 1) mod Length) and 
>         (Current.Buffer (Old.In_Index) = Item) and 
> --         (for all I in 1 .. Queue_Length'Old => 
> --            Buffer(I) = Buffer'Old (I)) and 
>         (not Queue_Empty (Current))); 

This way does not look simpler. I rather go with simple way even I decide to use Queue type instead of Singleton Queue.

> I commented out the comparison, because this is a *circular* buffer, so 
> the first valid element isn't at Buffer(1).

I do not understand this. Why isn't Buffer(1) valid if my index starts at 1? 

> I think it will all work better if you say 
>   subtype Index is Natural range 0 .. Length - 1; 
> so that mod works as you require. 
>
> You need to add 1 to the current index and then do mod length! 

This is another array index option.

A. Vo



  reply	other threads:[~2013-04-03 23:21 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-28 19:54 My bug or else regarding Visibility Rules Anh Vo
2013-03-28 20:58 ` Adam Beneschan
2013-03-28 22:03   ` Randy Brukardt
2013-03-30  6:05     ` Anh Vo
2013-04-02  0:56       ` Randy Brukardt
2013-04-02  1:52         ` Anh Vo
2013-04-02  8:26           ` Simon Wright
2013-04-02 18:17             ` Anh Vo
2013-04-02 20:16               ` Simon Wright
2013-04-03 23:21                 ` Anh Vo [this message]
2013-04-04  8:19                   ` Simon Wright
2013-04-04 19:21                     ` Anh Vo
2013-04-04 19:47                       ` Simon Wright
2013-04-02 22:04           ` Randy Brukardt
2013-03-28 22:06   ` Anh Vo
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox