stephes_ada_library_3.7.3_08b48307/source/sal-gen_stats-gen_image.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
--  Abstract :
--
--  See spec.
--
--  Copyright (C) 2003, 2005, 2009 Stephen Leake.  All Rights Reserved.
--
--  SAL is free software; you can redistribute it and/or modify it
--  under terms of the GNU General Public License as published by the
--  Free Software Foundation; either version 3, or (at your option) any
--  later version. SAL is distributed in the hope that it will be
--  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
--  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--  General Public License for more details. You should have received a
--  copy of the GNU General Public License distributed with SAL; see
--  file COPYING. If not, write to the Free Software Foundation, 59
--  Temple Place - Suite 330, Boston, MA 02111-1307, USA.
--
--  As a special exception, if other files instantiate generics from
--  SAL, or you link SAL object files with other files to produce
--  an executable, that does not by itself cause the resulting
--  executable to be covered by the GNU General Public License. This
--  exception does not however invalidate any other reasons why the
--  executable file might be covered by the GNU Public License.

with Ada.IO_Exceptions;
package body SAL.Gen_Stats.Gen_Image is

   function Image
     (Item      : in Display_Type;
      Mean_Fore : in Ada.Text_IO.Field := Default_Mean_Fore;
      Mean_Aft  : in Ada.Text_IO.Field := Default_Mean_Aft;
      Mean_Exp  : in Ada.Text_IO.Field := Default_Mean_Exp;
      SD_Fore   : in Ada.Text_IO.Field := Default_SD_Fore;
      SD_Aft    : in Ada.Text_IO.Field := Default_SD_Aft;
      SD_Exp    : in Ada.Text_IO.Field := Default_SD_Exp)
     return String
   is
      use Real_IO;
      --  Overhead for `( , , , )', and for '-.E' in numbers. Except
      --  standard deviation can't be negative.
      Mean_Width : Natural          := 3 + Mean_Fore + Mean_Aft + Mean_Exp;
      SD_Width   : Natural          := 2 + SD_Fore + SD_Aft + SD_Exp;
      Max_Width  : constant Natural := 8 + 3 * Mean_Width + SD_Width;
      Result     : String (1 .. Max_Width);
      First      : Natural;
      Last       : Natural          := Result'First;

      procedure Put (Item : in Real_Type; Width : in Natural; Aft, Exp : in Ada.Text_IO.Field)
      is begin
         First := Last + 1;
         Last  := Last + Width;
         Put (Result (First .. Last), Item, Aft, Exp);
      exception
      when Ada.IO_Exceptions.Layout_Error =>
         Result (First .. Last) := (others => '*');
      end Put;

   begin
      if Mean_Exp = 0 then
         Mean_Width := Mean_Width - 1;
      end if;
      if SD_Exp = 0 then
         SD_Width := SD_Width - 1;
      end if;

      Result (Last) := '(';

      Put (Item.Mean, Mean_Width, Mean_Aft, Mean_Exp);

      First                  := Last + 1;
      Last                   := Last + 2;
      Result (First .. Last) := ", ";

      Put (Item.Standard_Deviation, SD_Width, SD_Aft, SD_Exp);

      First                  := Last + 1;
      Last                   := Last + 2;
      Result (First .. Last) := ", ";

      Put (Item.Min, Mean_Width, Mean_Aft, Mean_Exp);

      First                  := Last + 1;
      Last                   := Last + 2;
      Result (First .. Last) := ", ";

      Put (Item.Max, Mean_Width, Mean_Aft, Mean_Exp);

      Last := Last + 1;
      Result (Last) := ')';

      return Result (1 .. Last);
   end Image;

end SAL.Gen_Stats.Gen_Image;