]>
Commit | Line | Data |
---|---|---|
cacbc350 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT COMPILER COMPONENTS -- | |
4 | -- -- | |
5 | -- S Y S T E M . V A L _ D E C -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
cacbc350 RK |
9 | -- Copyright (C) 1992,1993,1994,1995,1996 Free Software Foundation, Inc. -- |
10 | -- -- | |
11 | -- GNAT is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
13 | -- ware Foundation; either version 2, or (at your option) any later ver- -- | |
14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- | |
15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- | |
17 | -- for more details. You should have received a copy of the GNU General -- | |
18 | -- Public License distributed with GNAT; see file COPYING. If not, write -- | |
19 | -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- | |
20 | -- MA 02111-1307, USA. -- | |
21 | -- -- | |
22 | -- As a special exception, if other files instantiate generics from this -- | |
23 | -- unit, or you link this unit with other files to produce an executable, -- | |
24 | -- this unit does not by itself cause the resulting executable to be -- | |
25 | -- covered by the GNU General Public License. This exception does not -- | |
26 | -- however invalidate any other reasons why the executable file might be -- | |
27 | -- covered by the GNU Public License. -- | |
28 | -- -- | |
29 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 30 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
cacbc350 RK |
31 | -- -- |
32 | ------------------------------------------------------------------------------ | |
33 | ||
34 | -- This package contains routines for scanning decimal values where the size | |
35 | -- of the type is no greater than Standard.Integer'Size, for use in Text_IO. | |
36 | -- Decimal_IO, and the Value attribute for such decimal types. | |
37 | ||
38 | package System.Val_Dec is | |
39 | pragma Pure (Val_Dec); | |
40 | ||
41 | function Scan_Decimal | |
42 | (Str : String; | |
43 | Ptr : access Integer; | |
44 | Max : Integer; | |
45 | Scale : Integer) | |
46 | return Integer; | |
47 | -- This function scans the string starting at Str (Ptr.all) for a valid | |
48 | -- real literal according to the syntax described in (RM 3.5(43)). The | |
49 | -- substring scanned extends no further than Str (Max). There are three | |
50 | -- cases for the return: | |
51 | -- | |
52 | -- If a valid real literal is found after scanning past any initial spaces, | |
53 | -- then Ptr.all is updated past the last character of the literal (but | |
54 | -- trailing spaces are not scanned out). The value returned is the value | |
55 | -- Integer'Integer_Value (decimal-literal-value), using the given Scale | |
56 | -- to determine this value. | |
57 | -- | |
58 | -- If no valid real literal is found, then Ptr.all points either to an | |
59 | -- initial non-digit character, or to Max + 1 if the field is all spaces | |
60 | -- and the exception Constraint_Error is raised. | |
61 | -- | |
62 | -- If a syntactically valid integer is scanned, but the value is out of | |
63 | -- range, or, in the based case, the base value is out of range or there | |
64 | -- is an out of range digit, then Ptr.all points past the integer, and | |
65 | -- Constraint_Error is raised. | |
66 | -- | |
67 | -- Note: these rules correspond to the requirements for leaving the | |
68 | -- pointer positioned in Text_Io.Get | |
69 | -- | |
70 | -- Note: if Str is null, i.e. if Max is less than Ptr, then this is a | |
71 | -- special case of an all-blank string, and Ptr is unchanged, and hence | |
72 | -- is greater than Max as required in this case. | |
73 | ||
74 | function Value_Decimal (Str : String; Scale : Integer) return Integer; | |
75 | -- Used in computing X'Value (Str) where X is a decimal types whose size | |
76 | -- does not exceed Standard.Integer'Size. Str is the string argument of | |
77 | -- the attribute. Constraint_Error is raised if the string is malformed | |
78 | -- or if the value is out of range, otherwise the value returned is the | |
79 | -- value Integer'Integer_Value (decimal-literal-value), using the given | |
80 | -- Scale to determine this value. | |
81 | ||
82 | end System.Val_Dec; |