]>
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 | -- -- | |
748086b7 | 9 | -- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- |
cacbc350 RK |
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- -- | |
748086b7 | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
cacbc350 RK |
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 -- | |
748086b7 JJ |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
22 | -- You should have received a copy of the GNU General Public License and -- | |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
cacbc350 RK |
26 | -- -- |
27 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 28 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
cacbc350 RK |
29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
32 | -- This package contains routines for scanning decimal values where the size | |
33 | -- of the type is no greater than Standard.Integer'Size, for use in Text_IO. | |
34 | -- Decimal_IO, and the Value attribute for such decimal types. | |
35 | ||
36 | package System.Val_Dec is | |
009186e0 | 37 | pragma Pure; |
cacbc350 RK |
38 | |
39 | function Scan_Decimal | |
40 | (Str : String; | |
d90e94c7 | 41 | Ptr : not null access Integer; |
cacbc350 | 42 | Max : Integer; |
9de61fcb | 43 | Scale : Integer) return Integer; |
cacbc350 RK |
44 | -- This function scans the string starting at Str (Ptr.all) for a valid |
45 | -- real literal according to the syntax described in (RM 3.5(43)). The | |
46 | -- substring scanned extends no further than Str (Max). There are three | |
47 | -- cases for the return: | |
48 | -- | |
49 | -- If a valid real literal is found after scanning past any initial spaces, | |
50 | -- then Ptr.all is updated past the last character of the literal (but | |
51 | -- trailing spaces are not scanned out). The value returned is the value | |
52 | -- Integer'Integer_Value (decimal-literal-value), using the given Scale | |
53 | -- to determine this value. | |
54 | -- | |
55 | -- If no valid real literal is found, then Ptr.all points either to an | |
56 | -- initial non-digit character, or to Max + 1 if the field is all spaces | |
57 | -- and the exception Constraint_Error is raised. | |
58 | -- | |
59 | -- If a syntactically valid integer is scanned, but the value is out of | |
60 | -- range, or, in the based case, the base value is out of range or there | |
61 | -- is an out of range digit, then Ptr.all points past the integer, and | |
62 | -- Constraint_Error is raised. | |
63 | -- | |
64 | -- Note: these rules correspond to the requirements for leaving the | |
65 | -- pointer positioned in Text_Io.Get | |
66 | -- | |
67 | -- Note: if Str is null, i.e. if Max is less than Ptr, then this is a | |
68 | -- special case of an all-blank string, and Ptr is unchanged, and hence | |
69 | -- is greater than Max as required in this case. | |
70 | ||
71 | function Value_Decimal (Str : String; Scale : Integer) return Integer; | |
72 | -- Used in computing X'Value (Str) where X is a decimal types whose size | |
73 | -- does not exceed Standard.Integer'Size. Str is the string argument of | |
74 | -- the attribute. Constraint_Error is raised if the string is malformed | |
75 | -- or if the value is out of range, otherwise the value returned is the | |
76 | -- value Integer'Integer_Value (decimal-literal-value), using the given | |
77 | -- Scale to determine this value. | |
78 | ||
79 | end System.Val_Dec; |