comp.lang.ada
 help / color / mirror / Atom feed
From: murphy@mips.COM (Mike Murphy)
Subject: Re: "Integer" value of a CHARACTER
Date: 29 Nov 90 20:52:14 GMT	[thread overview]
Message-ID: <43658@mips.mips.COM> (raw)
In-Reply-To: 1990Nov28.210856.14960@sctc.com

In article <1990Nov28.210856.14960@sctc.com> stachour@sctc.com (Paul Stachour) writes:
>
>  In the (simplified) example below, I am trying to get a hash-value
>from several characters in a string.  However, I seem to get problems
>in doing this.  In the example given, I get "constraint-error" on the
>attempt to do the "conversion". (V_Name is a 60-char string with an
>OK name in it, the first character is a "c".)
>
>-- ********************************************************** --
>function Hash_Name(
>    The_Name                          : in V_Name ) 
>  return Positive is
>  C:                                    STRING(1..1);
>begin
>   C(1) := The_Name(1);
>   return POSITIVE'VALUE(C(1..1));
>--1      return POSITIVE'VALUE(The_Name(1));
>end;
>-- ********************************************************** --

The type'VALUE(string) attribute returns the type-value that the
string image represents.  Thus POSITIVE'VALUE("12") = 12, 
while POSITIVE'VALUE("cat") raises constraint_error, because "cat"
is not the image of a positive number.  To get a hash value,
you want to use the 'POS attribute, e.g.
	CHARACTER'POS(The_Name(1)) = character'pos('c') = 99
To get a real hash value you probably want to do some arithmetic
on the 'pos values of more than one character in the string.

If you want to use unchecked_conversion, you could convert four
characters at a time to integer (assuming 4-byte integers), or
convert one character to a tiny_integer (or whatever 1-byte integer
your implementation defines):
	function to_int is new unchecked_conversion (string, integer);
	function to_tint is new unchecked_conversion (character, tiny_integer);
	integer_obj := to_int(The_Name(1..4));
	tiny_integer_obj := to_tint(The_Name(1));
		-- this is essentially the same as doing a 'pos.

      reply	other threads:[~1990-11-29 20:52 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1990-11-28 21:08 "Integer" value of a CHARACTER Paul Stachour
1990-11-29 20:52 ` Mike Murphy [this message]
replies disabled

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