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.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,34a625e98d6a8792 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: The right way to handle this difference in Ada Date: Thu, 22 Jul 2004 15:03:46 +0200 Message-ID: <15yc7cceofj1e$.ioaad0q1si6i.dlg@40tude.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de /Z5S+E+xNFta8JWcpS5V1Q/5DV9rE8hLAgLQamF2HYEoY5m74= User-Agent: 40tude_Dialog/2.0.12.1 Xref: g2news1.google.com comp.lang.ada:2344 Date: 2004-07-22T15:03:46+02:00 List-Id: On Thu, 22 Jul 2004 12:23:09 +0200, vic wrote: > Hello, > > I'm starting to develope in Ada 95, but as I come from C++ language I'm > having some difficulties about strong typing. > > Please consider this type: > > type unsigned_int_12_type is range 0..(2*12)-1; > > and these 2 variables of the above type: > > a: unsigned_int_12_type; > b: unsigned_int_12_type; > > If the code must perform a difference between a and b, say: > > c := a-b > > 1) which should be the type of c? I think it should be something like: > > type signed_int_12_type is range -unsigned_int_12'last .. > unsigned_int_12'last. > > Is this right? It depends! 1. In C++ spirit I would expect something like type unsigned_int_12_type is mod 2**12; and the types of a,b,c all same. So that: a : unsigned_int_12_type := 1; b : unsigned_int_12_type := 2; c : unsigned_int_12_type := a - b; -- yields 4095 2. Well, if c should be negative then probably: type int_12_type is range -2**12..2**12-1; subtype unsigned_int_12_subtype is int_12_type range 0..int_12_type'Last; a : unsigned_int_12_subtype := 1; b : unsigned_int_12_subtype := 2; c : int_12_type := a - b; -- yields -1 Here unsigned_int_12_subtype is a subtype. Though its values cannot be negative, temporary values can be. It is similar to the solution of proposed by Nick Roberts, but uses a separate type int_12_type instead of standard Integer, mainly for strong typing sake. > 2) And I should rename a "-" operation which gets two signed_int_12_type as > operands and returns signed_int_12_type as result? -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de