with Text_Io;
with Implementation_Dependencies;
with Type_Definitions;
use Type_Definitions;
use Text_Io;
use Implementation_Dependencies;
--
--
package Average is
    --:Overview
    --:average is a package for calculating the average value from arbitrary
    --:number of elements.  to avoid the overflow condition, an incremental
    --:average algorithm is used:
    --:            previous_average             current_value
    --: new_ave= -------------------- * (n-1) + --------------
    --:                   n                           n
    --: where n = current number of element read

    --:N/A:errors, raises, modifies, requires

    --version          : 0.0
    --author           : Alex Wei
    --initial release  : 05/13/85

    procedure Averager (--:calculates the integer average value
                        New_Average : out Integer;
                        --: the calculated average number
                        Count : in Positive;
                        --: the current number of element
                        Current_Value : in Integer;
                        --: the current element
                        Previous_Value : in Integer);
    --: the previous average number
    --:raises:
    --:effects
    --:calaulates the average value for an arbitrary number of integers

    --:requires

    --:N/A: modifies, errors

    --:
    procedure Averager (  --:calculates the long_integer average value
                        New_Average : out Long_Integer;
                        --: the calculated average number
                        Count : in Positive;
                        --: the current number of element
                        Current_Value : in Long_Integer;
                        --: the current element
                        Previous_Value : in Long_Integer);
    --: the previous average number
    --:raises:
    --:effects
    --:calaulates the average value for an arbitrary number of long_integers

    --:requires

    --:N/A: modifies, errors

    procedure Averager (--:calculates the float average value
                        New_Average : out Float;
                        --: the calculated average number
                        Count : in Positive;
                        --: the current number of element
                        Current_Value : in Float;
                        --: the current element
                        Previous_Value : in Float);
    --: the previous average number
    --:raises:
    --:effects
    --:calaulates the average value for an arbitrary number of float elements

    --:requires

    --:N/A: modifies, errors

    --    procedure Averager (--:calculates the long_float average value
    --                        New_Average : out Long_Float;
    --: the calculated average number
    --                        Count : in Positive;
    --: the current number of element
    --                        Current_Value : in Long_Float;
    --: the current element
    --                        Previous_Value : in Long_Float);
    --: the previous average number
    --:raises:
    --:effects
    --:calaulates the average value for an arbitrary number of long_float elements

    --:requires

    --:N/A: modifies, errors

    --procedure averager( --:calculates the fixed_point average value
    --                  new_average:  out fixed_point;
    --                                --: the calculated average number
    --                  count      :  in  positive;
    --                                --: the current number of element
    --              current_value  :  in  fixed_point;
    --                                --: the current element
    --             previous_value  :  in  fixed_point);
    --: the previous average number
    --:raises:
    --:effects
    --:calaulates the average value for an arbitrary number of fixed_points

    --:requires

    --:N/A: modifies, errors

end Average;