comp.lang.ada
 help / color / mirror / Atom feed
From: Ben Brosgol <brosgol@world.std.com>
Subject: Re: access function in strings.maps
Date: 1997/04/26
Date: 1997-04-26T00:00:00+00:00	[thread overview]
Message-ID: <336187D4.42A7@world.std.com> (raw)
In-Reply-To: 336154D9.4E0A@calpoly.edu


Dennis W. Butler wrote:
> 
> I've been exploring the string handling capabilities of Ada95 and have
> stumbled across a Thing I can't figure out. In the strings.maps package
> (LRM section A.4.2), there is a type definition that reads:
> 
> type Character_Mapping_Function is access function (From : in character)
> return character;
> 
> I would have thought a Character_Mapping_Function would be more like:
> 
> function Character_Mapping_Function (The_Map: in Character_Mapping;
> Domain_Character: in Character) return Character; -- range character

The latter is in fact present as the Value function:
   function Value( Map : in Character_Mapping; Element : in Character )
      return Character;
 
> Although I read LRM section 3.10, I couldn't figure out the access
> function type definition. Where can I get an explanation of what the
> type definition does and how I can use it? I did note that the LRM says
> that the Character_mapping_Function is used for transformational
> mappings in the Translate subprograms...does this mean I'm not supposed
> to worry about it?

A good place to look is the Rationale; here's what it says in Part
Three, Section A.2.4:

"There is another possible representation for mappings [besides an array
whose index subtype and element subtype are both Character], namely an
access value denoting a function whose domain and range are the
character type in question.  This would be useful where the domain and
range are very large sets, and in fact is used in the string handling
packages for Wide_Character and Wide_String.  To avoid unnecessary
differences between the String and Wide_String packages, we have
supplied the analogous access-to-subprogram type in Strings.Maps:
   type Character_Mapping_Function is 
      access function( From : in Character ) return Character;
Each subprogram that takes a Character_Mapping parameter is overloaded
with a version that takes a Character_Mapping_Function."

For example, suppose you want to translate a string where each character
is to map to its successor, with wrap around.  You could compose a
Character_Mapping by calling To_Mapping, supplying domain and range
character sequences, but the notation is somewhat clumsy.  If you can
tolerate the additional run-time overhead, then use a
Character_Mapping_Function instead:
   function Successor( From : Character ) return Character is
   begin
      return Character'Val( 
        Interfaces.Unsigned_8( Character'Pos(From) ) + 1 );
   end Successor;
   ...
   Translate( My_String, Successor'Access );
> 
> Thanks,
> 
> Dennis Butler
> Computer Science Department
> Cal Poly, San Luis Obispo

You're welcome,

Ben Brosgol
Aonix
200 Wheeler Rd.
Burlington, MA 01803
brosgol@aonix.com




  parent reply	other threads:[~1997-04-26  0:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-04-25  0:00 access function in strings.maps Dennis W. Butler
1997-04-26  0:00 ` Robert Dewar
1997-04-26  0:00 ` Ben Brosgol [this message]
1997-04-28  0:00 ` Stephen Leake
replies disabled

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