comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: Char type verification
Date: Fri, 17 Nov 2006 21:22:05 +0000
Date: 2006-11-17T21:22:05+00:00	[thread overview]
Message-ID: <m2irhdbwg2.fsf@grendel.local> (raw)
In-Reply-To: 455cf4f8$0$17901$426a74cc@news.free.fr

Yves Bailly <kafka.fr@laposte.net> writes:

> First create a generic package:
> --8<-----8<-----8<-----8<-----8<-----8<-----8<---
> generic
>    type T is private;
>    type H is range <>;
>    with function Hash(val: in T) return H;
> package P is
>    function Is_In_Range(lower: in T;
>                         upper: in T;
>                         value: in T)
>       return Boolean;
> end P;
> --8<-----8<-----8<-----8<-----8<-----8<-----8<---
>
> The body performs the actual check of validity:
> --8<-----8<-----8<-----8<-----8<-----8<-----8<---
> package body P is
>
>    function Is_In_Range(lower: in T;
>                         upper: in T;
>                         value: in T)
>       return Boolean is
>    begin
>       return Hash(value) in Hash(lower)..Hash(upper);
>    end Is_In_Range;
>
> end P;
> --8<-----8<-----8<-----8<-----8<-----8<-----8<---

I would have thought it would be a lot clearer if you required "<" say
instead of Hash. To me a hash is typically a pseudo-random conversion
of a private value to an integral type; if you want ordering, use
functions with ordering-related names!

Then you could say

   return not (upper < value) and then not (value < lower);

(I think! that's the third time I've rewritten that ...)

By the way, did you know you can have (library-level, even) generic
subprograms?

generic
   type T is private;
   type H is range <>;
   with function Hash(val: in T) return H;
function Is_In_Range(lower: in T;
                     upper: in T;
                     value: in T)
   return Boolean;



  parent reply	other threads:[~2006-11-17 21:22 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-15 22:00 Char type verification KE
2006-11-15 21:57 ` Georg Bauhaus
2006-11-15 23:15   ` KE
2006-11-16  4:48     ` Jeffrey R. Carter
2006-11-16 19:53       ` Adam Beneschan
2006-11-16 23:30       ` Yves Bailly
2006-11-17  0:48         ` Jeffrey R. Carter
2006-11-17  1:59           ` Adam Beneschan
2006-11-17 11:30           ` Stephen Leake
2006-11-17 15:33             ` KE
2006-11-17 15:10               ` Georg Bauhaus
2006-11-17 18:30               ` Ludovic Brenta
2006-11-18  2:29                 ` Brian May
2006-11-17 19:45               ` Jeffrey R. Carter
     [not found]               ` <mQm7h.8782$ig4.3262@newsread2.news.pas.earthlink.net>
2006-11-17 19:56                 ` Jeffrey R. Carter
     [not found]                   ` <omz7h.222$1s6.165@newsread2.news.pas.earthlink.net>
2006-11-19  2:19                     ` OT: French Idioms (was Re: Char type verification) Jeffrey R. Carter
2006-11-19  9:04                       ` Dmitry A. Kazakov
2006-11-17 21:22         ` Simon Wright [this message]
2006-11-17 23:59           ` Char type verification Yves Bailly
2006-11-15 23:23 ` Simon Wright
2006-11-15 23:33   ` KE
2006-11-16  4:52     ` Jeffrey R. Carter
2006-11-15 23:36 ` Adam Beneschan
2006-11-15 23:55   ` KE
2006-11-16  4:54     ` Jeffrey R. Carter
2006-11-16  1:08 ` jimmaureenrogers
2006-11-16  1:45   ` KE
2006-11-16  2:15     ` jimmaureenrogers
2006-11-16  2:42     ` Steve Whalen
2006-11-16  9:36     ` Alex R. Mosteo
2006-11-16  7:02 ` KE
2006-11-16 17:04   ` Dmitry A. Kazakov
2006-11-16 22:43   ` Brian May
  -- strict thread matches above, loose matches on Subject: below --
2006-11-16 16:01 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