[BACK]Return to characters_and_numbers.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Numbers/characters_and_numbers.adb, Revision 1.1.1.1

1.1       maekawa     1: package body Characters_and_Numbers is
                      2:
                      3:   function Convert ( c : character ) return natural is
                      4:
                      5:   -- DESCRIPTION :
                      6:   --   Returns 10 if the character does not represent a number
                      7:   --   between 0 and 9, otherwise returns the corresponding number.
                      8:
                      9:   begin
                     10:     case c is
                     11:       when '0' => return 0;
                     12:       when '1' => return 1;
                     13:       when '2' => return 2;
                     14:       when '3' => return 3;
                     15:       when '4' => return 4;
                     16:       when '5' => return 5;
                     17:       when '6' => return 6;
                     18:       when '7' => return 7;
                     19:       when '8' => return 8;
                     20:       when '9' => return 9;
                     21:       when others => return 10;
                     22:     end case;
                     23:   end Convert;
                     24:
                     25:   function Convert_Decimal ( n : natural ) return character is
                     26:
                     27:   -- DESCRIPTION :
                     28:   --   For n in 0..9, the corresponding character representation is returned.
                     29:
                     30:   begin
                     31:     case n is
                     32:       when 0 => return '0';
                     33:       when 1 => return '1';
                     34:       when 2 => return '2';
                     35:       when 3 => return '3';
                     36:       when 4 => return '4';
                     37:       when 5 => return '5';
                     38:       when 6 => return '6';
                     39:       when 7 => return '7';
                     40:       when 8 => return '8';
                     41:       when 9 => return '9';
                     42:       when others => return '0';
                     43:     end case;
                     44:   end Convert_Decimal;
                     45:
                     46:   function Convert_Hexadecimal ( c : character ) return natural is
                     47:   begin
                     48:      case c is
                     49:        when '0' => return 0;
                     50:        when '1' => return 1;
                     51:        when '2' => return 2;
                     52:        when '3' => return 3;
                     53:        when '4' => return 4;
                     54:        when '5' => return 5;
                     55:        when '6' => return 6;
                     56:        when '7' => return 7;
                     57:        when '8' => return 8;
                     58:        when '9' => return 9;
                     59:        when 'A' => return 10;
                     60:        when 'B' => return 11;
                     61:        when 'C' => return 12;
                     62:        when 'D' => return 13;
                     63:        when 'E' => return 14;
                     64:        when 'F' => return 15;
                     65:           when others => return 16;
                     66:      end case;
                     67:   end Convert_Hexadecimal;
                     68:
                     69:   function Convert_Hexadecimal ( n : natural ) return character is
                     70:   begin
                     71:        if n < 10
                     72:      then return Convert_Decimal(n);
                     73:      else case n is
                     74:             when 10 => return 'A';
                     75:             when 11 => return 'B';
                     76:             when 12 => return 'C';
                     77:             when 13 => return 'D';
                     78:             when 14 => return 'E';
                     79:             when 15 => return 'F';
                     80:             when others => return '0';
                     81:           end case;
                     82:     end if;
                     83:   end Convert_Hexadecimal;
                     84:
                     85:   function Convert ( s : String ) return natural is
                     86:
                     87:     acc : natural := 0;
                     88:     cvn : natural;
                     89:
                     90:   begin
                     91:     for i in s'range loop
                     92:       cvn := Convert(s(i));
                     93:       if cvn < 10
                     94:        then acc := acc*10 + cvn;
                     95:       end if;
                     96:     end loop;
                     97:     return acc;
                     98:   end Convert;
                     99:
                    100:   function Convert ( n : natural ) return String is
                    101:   begin
                    102:     if n < 10
                    103:      then declare
                    104:             res : String(1..1);
                    105:           begin
                    106:             res(1) := Convert_Decimal(n);
                    107:             return res;
                    108:           end;
                    109:      else declare
                    110:             rest : natural := n mod 10;
                    111:             head : natural := n/10;
                    112:             headstr : constant string := Convert(head);
                    113:             res : String(1..headstr'last+1);
                    114:           begin
                    115:             res(headstr'range) := headstr;
                    116:             res(res'last) := Convert_Decimal(rest);
                    117:             return res;
                    118:           end;
                    119:     end if;
                    120:   end Convert;
                    121:
                    122:   procedure Skip_Spaces ( file : in file_type; c : in out character ) is
                    123:   begin
                    124:     get(file,c);
                    125:     while c = ' ' and not End_of_Line(file) loop
                    126:       get(file,c);
                    127:     end loop;
                    128:   end Skip_Spaces;
                    129:
                    130:   procedure Skip_Underscores ( file : in file_type; c : in out character ) is
                    131:   begin
                    132:     get(file,c);
                    133:     while c = '_' and not End_of_Line(file) loop
                    134:       get(file,c);
                    135:     end loop;
                    136:   end Skip_Underscores;
                    137:
                    138: end Characters_and_Numbers;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>