All pastes #1063400 Raw Edit

Anonymous

public java v1 · immutable
#1063400 ·published 2008-07-06 01:27 UTC
rendered paste body
// like Integer, but can be modified; I use it to pass a number "by reference"class MutableInteger {    public int num;}class SampleData {    //meh, in C++, this class would have a std::string (which is mutable) and    //an int I can then pass by pointer, instead of this mess :)    public StringBuilder string;    public MutableInteger num;}class NumberHandler extends XMLHandler {    public NumberHandler(MutableInteger result) {        this.result = result;    }    public void characterData(char[] data) {        int i;        for (i=0; i<data.length; ++i) {            if ('0' <= data[i] && data[i] <= '9') {                result.num *= 10;                result.num += data[i] - '0';            } else {                throw new XMLException("Non-digit found in <data>");            }        }    }    private MutableInteger result;}class DataHandler extends XMLHandler {    public DataHandler(SampleData data) {        this.data = data;        inData = false;        inString = false;    }    public void startElement(String name) {        if (name.equals("data")) {            inData = true;        } else if (name.equals("string") && inData) {            inString = true;        } else if (name.equals("num") && inData) {            pushHandler(new NumberHandler(data.num));        }    }    public void endElement(String name) {        if (name.equals("data")) {            if (inData) {                inData = false;            } else {                throw new XMLException("end of data but we weren't in data");            }        } else if (name.equals("string")) {            if (inString) {                inString = false;            } else {                throw new XMLException("end of string but we weren't in string");            }        }    }    public void characterData(char[] s) {        if (inString) {            data.string.append(s);        }    }    private SampleData data;    private boolean inData, inString;};class MainTest {    public static void main(String args[]) {        String xml = "<data><string>foobarbaz</string><num>12345</num></data>";        SampleData data = new SampleData();        XMLParser parser = new XMLParser();        parser.pushHandler(new DataHandler(data));        try {            parser.parse(xml);        } catch(XMLException e) {            System.err.println("Parse error: " + e.getMessage());            System.exit(1);        }        if (!data.string.equals("foobarbaz")) {            System.err.println("Parsed string doesn't match");            System.exit(1);        }        if (data.num != 12345) {            System.err.println("Parsed number doesn't match");            System.exit(1);        }    }}/* vim: set ts=4 sw=4 et: */