Changeset 3642


Ignore:
Timestamp:
09/10/03 00:42:14 (19 years ago)
Author:
piso
Message:

readBinary()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/CharacterInputStream.java

    r3565 r3642  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: CharacterInputStream.java,v 1.44 2003-09-03 23:46:27 piso Exp $
     5 * $Id: CharacterInputStream.java,v 1.45 2003-09-10 00:42:14 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    337337                case 'A':
    338338                    return readArray(numArg);
     339                case 'b':
     340                case 'B':
     341                    return readBinary();
    339342                case 'c':
    340343                case 'C':
     
    729732    }
    730733
     734    private LispObject readBinary() throws LispError
     735    {
     736        try {
     737            StringBuffer sb = new StringBuffer();
     738            while (true) {
     739                int n = read();
     740                if (n < 0)
     741                    break;
     742                char c = (char) n;
     743                if (c == '0' || c == '1')
     744                    sb.append(c);
     745                else {
     746                    unread(c);
     747                    break;
     748                }
     749            }
     750            String s = sb.toString();
     751            try {
     752                return new Fixnum(Integer.parseInt(s, 2));
     753            }
     754            catch (NumberFormatException e) {}
     755            // parseInt() failed.
     756            try {
     757                return new Bignum(new BigInteger(s, 2));
     758            }
     759            catch (NumberFormatException e) {}
     760            // Not a number.
     761            throw new LispError();
     762        }
     763        catch (IOException e) {
     764            throw new StreamError(e);
     765        }
     766    }
     767
    731768    private LispObject readHex() throws LispError
    732769    {
Note: See TracChangeset for help on using the changeset viewer.