From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: =?UTF-8?Q?Bj=c3=b6rn_Lundin?= Newsgroups: comp.lang.ada Subject: Re: converting pointer to value Date: Fri, 5 Mar 2021 08:10:35 +0100 Organization: A noiseless patient Spider Message-ID: References: <02709d96-50fe-4e87-bdb5-4f430fa2717an@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 5 Mar 2021 07:10:35 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="c9e3b2236f724ff4b8eeba0adbb7f865"; logging-data="18071"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+vMNsmU9mm3uBsWDRl1f7i" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 Cancel-Lock: sha1:A6gHQ+o+GeqDMGiqvP/3jM5QJB4= In-Reply-To: <02709d96-50fe-4e87-bdb5-4f430fa2717an@googlegroups.com> Content-Language: sv Xref: reader02.eternal-september.org comp.lang.ada:61476 List-Id: Den 2021-03-04 kl. 17:55, skrev Shark8: > On Thursday, March 4, 2021 at 8:59:48 AM UTC-7, björn lundin wrote: > >> this code looks like >> >> type SQLSMALLINT is range -(2 ** 15) .. +(2 ** 15) - 1; >> for SQLSMALLINT'Size use 16; >> >> type SQLRETURN is new SQLSMALLINT; >> >> >> how to get the Pvalue as an SQLRETURN? > > Ok, in Ada the creation of a new type, even if only deriving it via NEW, makes a type which is incompatible with the old type. > Thus you can say TYPE TEMPERATURE IS NEW INTEGER; and TYPE SPEED IS NEW INTEGER; and values of these types are NOT interchangeable even though both have the same internal representation and properties that INTEGER does. The way that you can use these different types together is by casting; given X : SPEED := 3; you can say Y : TEMPERATURE := SPEED(X); -- which works because they have the same internal representation if they did not have the same representation you would have to use UNCHECKED_CONVERSION. > well, yes. ... > It means that we don't know what the size of ADDRESS (and thus SQLPOINTER) actually is, but assuming you're on a 32- or 64-bit machine it's likely 2 to 4 times as large as the 16-bit SQLSMALLINT-- which is a good indication that a simple UNCHECKED_CONVERSION is the wrong answer. I think I first settle with 64bit. 64bit os and 64 bit compiler > > Try looking at the operations which have SQLPOINTER as a parameter/result. I did and the only operation usefull here is the mentioned utility function function To_Address (P : SQLPOINTER) return System.Address; -- Björn