FileDocCategorySizeDatePackage
ATResponseParser.javaAPI DocAndroid 5.1 API4270Thu Mar 12 22:22:54 GMT 2015com.android.internal.telephony

ATResponseParser

public class ATResponseParser extends Object
{@hide}

Fields Summary
private String
mLine
Instance Variables
private int
mNext
private int
mTokStart
private int
mTokEnd
Constructors Summary
public ATResponseParser(String line)
Class Methods


       

    
      
    
        mLine = line;
    
Methods Summary
public booleanhasMore()

        return mNext < mLine.length();
    
public booleannextBoolean()

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

        nextTok();

        if (mTokEnd - mTokStart > 1) {
            throw new ATParseEx();
        }
        char c = mLine.charAt(mTokStart);

        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 = mTokStart ; i < mTokEnd ; i++) {
            char c = mLine.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 mLine.substring(mTokStart, mTokEnd);
    
private voidnextTok()

        int len = mLine.length();

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

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

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

            char c = mLine.charAt(mNext++);
            boolean hasQuote = false;

            c = skipWhiteSpace(c);

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

        // consume "^[^:]:"

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

            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 = mLine.length();
        while (mNext < len && Character.isWhitespace(c)) {
            c = mLine.charAt(mNext++);
        }

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