!standard A.4.2 (63) 99-08-31 AI95-00151/03
!class binding interpretation 96-09-04
!status Corrigendum 2000 99-05-27
!status WG9 approved 98-06-12
!status ARG Approved 13-0-0 97-11-14
!status work item 96-09-08
!status received 96-09-04
!priority Low
!difficulty Easy
!qualifier Error
!subject Bounds of string returned by Ada.Strings.Maps.To_Range
!summary
To_Range returns the Character_Sequence value R, such that if D =
To_Domain (Map), then R has the same bounds as D, and D(I) maps to R(I)
for each I in D'Range.
!question
A.4.2(63) says:
To_Range returns the Character_Sequence value R, with lower
bound 1 and upper bound Map'Length, such that if D = To_Domain(Map)
then D(I) maps to R(I) for each I in D'Range.
However, Map is not an array, so Map'Length makes no sense.
!recommendation
(See summary.)
!wording
Replace A.4.2(63) with the summary above.
!discussion
The simplest fix is to specify that the bounds are the same as those for
To_Domain.
!corrigendum A.04.02(63)
@drepl
@xindent
@dby
@xindent
!ACATS test
The AI corrects a definition. To_Range is adaquately tested by ACATS test
CXA4024.A.
!appendix
!section A.4.2(63)
!subject Bounds of string returned by Ada.Strings.Maps.To_Range
!reference RM95-A.4.2(63)
!from Carol Charlson 96-06-19
!keywords to_range map
!reference 96-5603.a Carol Charlson 96-6-19>>
!discussion
Several questions follow regarding the use of Map'Length in A.4.2(63)
for the upper bound of the string returned by Ada.Strings.Maps.To_Range:
RM95 A.4.2(16) subtype Character_Sequence is String;
RM95 A.4.2(20) type Character_Mapping is private;
RM95 A.4.2(24) function To_Range (Map : in Character_Mapping) return
Character_Sequence;
RM95 A.4.2(63) To_Range returns the Character_Sequence value R, with
lower bound 1 and upper bound Map'Length, such that if
D = To_Domain(Map) then D(I) maps to R(I)
for each I in D'Range.
Example:
Map : Character_Mapping := to_mapping ("abc", "ABC");
D : constant Character_Sequence := To_Domain(Map); -- "abc"
R : constant Character_Sequence := To_Range (Map); -- "ABC ... "
In the above example, the domain is a 3 character string "abc". The range
contains 3 characters "ABC" that are placed in a character_sequence string
which is 1..Map'Length in size, according to A.4.2(63).
1) Map'Length implies an array implementation for the private type.
Implementation details should be hidden.
2) If type Character_Mapping is array(Character) of Character
as suggested by Rationale p. A-10, then Map'Length > 3.
What is the purpose of returning 4..Map'Length unknown characters?
3) Suppose the full definition of Map is a non-array type.
What is the upper bound of the string returned by To_Range?
The bounds of the strings returned by To_Range and To_Domain should be
identical, given the same Character_Mapping. Characteristics of the
Implementation-Defined Character_Mapping should not be used to define
the bounds of the string returned by To_Range.
A suggested rewording of A.4.2(63) is:
To_Range returns the Character_Sequence value R, with lower bound 1 and
upper bound D'Length, where D = To_Domain (Map). The contents of R
are ordered such that D(I) maps to R(I) for each I in D'Range.
==========================================================================
Carol Charlson Harris Computer Systems Corporation
Ft. Lauderdale, FL 33309-1892
Internet: Carol.Charlson@mail.hcsc.com
==========================================================================
****************************************************************
!section A.4.2(63)
!subject Bounds of string returned by Ada.Strings.Maps.To_Range
!reference RM95-A.4.2(63)
!keywords to_range map
!reference 96-5603.a Carol Charlson 96-6-19
!from Bob Duff
!reference 96-5610.a Robert A Duff 96-6-22>>
!discussion
> Several questions follow regarding the use of Map'Length in A.4.2(63)
Right. Map is not an array type, so Map'Length makes no sense. The
fact that the full view might be an array type is irrelevant.
> A suggested rewording of A.4.2(63) is:
>
> To_Range returns the Character_Sequence value R, with lower bound 1 and
> upper bound D'Length, where D = To_Domain (Map). The contents of R
> are ordered such that D(I) maps to R(I) for each I in D'Range.
Yes, I agree.
Or, perhaps:
To_Range returns the Character_Sequence value R, such that if D =
To_Domain (Map), then R has the same bounds as D, and D(I) maps to R(I)
for each I in D'Range.
- Bob
****************************************************************