/*----------------------------------------------------------------------------
 * Klasse:		    Parser.java
 * Beschreibung:	Superclass aller Bahnelemente
 * Autor:		    Jack Meyer
 * Datum:		    November, 1997
 * ---------------------------------------------------------------------------
 */


abstract class Parser {

    /*
     * Parser um String Parameter in Numerische Parameter umzurechnen
     */
    protected static double[] ParseStringToDouble (String aStringParameter)
    throws ParsingException,
           NumberFormatException,
           StringIndexOutOfBoundsException
    {
        /* zähle die Arguments */
        int scanIndex =0;
        int numberOfArguments =1;
        do {
            scanIndex = aStringParameter.indexOf (',',scanIndex);
            /* String.indexOf() gibt -1 zurück, wenn keine Zeichen mehr gefunden */
            if (scanIndex >=0) {
                /* noch ein Komma gefunden -> ein weiters Argument */
                numberOfArguments ++;
                scanIndex ++;
            };
        } while (scanIndex >=0);

        /* generiere den Argumenten-Array */
        double[] doubleArg = new double[numberOfArguments];

        /* suche Klammer auf */
        scanIndex = aStringParameter.indexOf('(') +1;
        if (scanIndex <=0 ) throw new ParsingException ("Open paranthesis missing");

        /* lese Argumente */
        int scanEnd =0;
        for (int counter =0; counter < numberOfArguments; counter++) {
            /* suche nächstes Komma */
            scanEnd = aStringParameter.indexOf (',', scanIndex);
            /* test ob noch eines gefunden, sonst lese bis Ende */
            /* teste zuerst auf ) */
            if (scanEnd <0) {scanEnd = aStringParameter.indexOf(')', scanIndex);};
            if (scanEnd <0) {scanEnd = aStringParameter.length() -1;};
            /* bilde Substring */
            String stringArgument = aStringParameter.substring (scanIndex,scanEnd);
            doubleArg[counter] = Double.valueOf(stringArgument).doubleValue();
            scanIndex = scanEnd +1;
        }

        /* sende ArgumentenArray zurück */
        return doubleArg;
    };

};