class interface P_INTEGER_DECODER
creation
   make (new_base: INTEGER)
      require
         ok: new_base > 2
feature(s) from P_INTEGER_DECODER
   --  Creation
   make (new_base: INTEGER)
      require
         ok: new_base > 2
feature(s) from P_INTEGER_DECODER
   --  Base
   base: INTEGER
feature(s) from P_INTEGER_DECODER
   --  Integer
   extend (digit: CHARACTER)
      --  Add right digit.
      require
         base: is_digit(digit)
      ensure
         done_integer: value = old value * base + char_to_int(digit);
         done_digits: digits = old digits + 1
   reset
      ensure
         ok: value = 0 and digits = 0
   value: INTEGER
      --  Current integer.
   digits: INTEGER
      --  Number of converted digits (not including sign).
feature(s) from P_INTEGER_DECODER
   --  String to integer
   from_string (str: STRING)
      require
         ok: str /= Void
feature(s) from P_INTEGER_DECODER
   --  Digit level
   int_to_char (digit: INTEGER): CHARACTER
      --  Integer to character digit.
      require
         ok: digit >= 0 and digit < base
      ensure
         good_base: is_digit(Result);
         done: char_to_int(Result) = digit
   char_to_int (c: CHARACTER): INTEGER
      --  Character to integer.
      require
         is_intchar: is_digit(c)
      ensure
         good_base: Result >= 0 and Result < base; --  (case sensitive) int_to_char(Result) = c
         done: 
   is_digit (c: CHARACTER): BOOLEAN
      --  Is this character a valid digit?
feature(s) from P_INTEGER_DECODER
   --  Encode
   value_to_string (int: INTEGER): STRING
      --  Encode character.
      ensure
         is_copy: Result /= Void;
         done: Result.count > 0
invariant
   base_ok: base >= 2 and base <= digit_table.count;
end of P_INTEGER_DECODER