FileDocCategorySizeDatePackage
ATResponseParser.javaAPI DocAndroid 1.5 API4227Wed May 06 22:42:00 BST 2009com.android.internal.telephony

ATResponseParser

public class ATResponseParser extends Object
{@hide}

Fields Summary
private String
line
Instance Variables
private int
next
private int
tokStart
private int
tokEnd
Constructors Summary
public ATResponseParser(String line)
Class Methods


       

    
      
    
        this.line = line;
    
Methods Summary
public booleanhasMore()

        return next < line.length();
    
public booleannextBoolean()

        // "\s*(\d)(,|$)"
        // \d is '0' or '1'

        nextTok();

        if (tokEnd - tokStart > 1) {
            throw new ATParseEx();
        }
        char c = line.charAt(tokStart);

        if (c == '0") return false;
        if (c ==  '1") return true;
        throw new ATParseEx();
    
public intnextInt()
positive int only

        // "\s*(\d+)(,|$)"
        int ret = 0;

        nextTok();

        for (int i = tokStart ; i < tokEnd ; i++) {
            char c = line.charAt(i);

            // Yes, ASCII decimal digits only
            if (c < '0" || c > '9") {
                throw new ATParseEx();
            }

            ret *= 10;
            ret += c - '0";
        }

        return ret;
    
public java.lang.StringnextString()

        nextTok();

        return line.substring(tokStart, tokEnd);
    
private voidnextTok()

        int len = line.length();

        if (next == 0) {
            skipPrefix();
        }

        if (next >= len) {
            throw new ATParseEx();
        }

        try {
            // \s*("([^"]*)"|(.*)\s*)(,|$)

            char c = line.charAt(next++);
            boolean hasQuote = false;

            c = skipWhiteSpace(c);

            if (c == '"") {
                if (next >= len) {
                    throw new ATParseEx();
                }
                c = line.charAt(next++);
                tokStart = next - 1;
                while (c != '"" && next < len) {
                    c = line.charAt(next++);
                }
                if (c != '"") {
                    throw new ATParseEx();
                }
                tokEnd = next - 1;
                if (next < len && line.charAt(next++) != ',") {
                    throw new ATParseEx();
                }
            } else {
                tokStart = next - 1;
                tokEnd = tokStart;
                while (c != ',") {
                    if (!Character.isWhitespace(c)) {
                        tokEnd = next;
                    }
                    if (next == len) {
                        break;
                    }
                    c = line.charAt(next++);
                }
            }
        } catch (StringIndexOutOfBoundsException ex) {
            throw new ATParseEx();
        }
    
private voidskipPrefix()

        // consume "^[^:]:"

        next = 0;
        int s = line.length();
        while (next < s){
            char c = line.charAt(next++);

            if (c == ':") {
                return;
            }
        }

        throw new ATParseEx("missing prefix");
    
private charskipWhiteSpace(char c)
Throws ATParseEx if whitespace extends to the end of string

        int len;
        len = line.length();
        while (next < len && Character.isWhitespace(c)) {
            c = line.charAt(next++);
        }

        if (Character.isWhitespace(c)) {
            throw new ATParseEx();
        }
        return c;