public void addXRefTableEntries(Parser parser) {
        m_bIsCrossReferenceTable = true;
        try {
//System.out.println("Starting to read xref table     : " + (new java.util.Date()));
//int countOfAllEntries = 0;
            while (true) {
                Object startingObjectNumberOrTrailer = parser.getNumberOrStringWithMark(16);
                if (!(startingObjectNumberOrTrailer instanceof Number)) {
                    parser.ungetNumberOrStringWithReset();
                    break;
                }
                int startingObjectNumber = ((Number) startingObjectNumberOrTrailer).intValue();
                int numEntries = ((Number) parser.getToken()).intValue();
                int currNumber = startingObjectNumber;
                for (int i = 0; i < numEntries; i++) {
                    long tenDigitNum = parser.getIntSurroundedByWhitespace();  // ( (Number) getToken() ).longValue();
                    int generationNum = parser.getIntSurroundedByWhitespace(); // ( (Number) getToken() ).intValue();
                    char usedOrFree = parser.getCharSurroundedByWhitespace();  // ( (String) getToken() ).charAt( 0 );
                    if (usedOrFree == 'n')         // Used
                        addUsedEntry(currNumber, tenDigitNum, generationNum);
                    else if (usedOrFree == 'f')    // Free
                        addFreeEntry(currNumber, (int) tenDigitNum, generationNum);
                    //System.out.println("xref entry " + (i+1) + " of " + numEntries + "   tenDigitNum: " + tenDigitNum + ", generationNum: " + generationNum + ", usedOrFree: " + usedOrFree + ", objNum: " + currNumber);

                    currNumber++;
//countOfAllEntries++;
                }
            }
//System.out.println("Done reading xref table entries : " + (new java.util.Date()) + "  count: " + countOfAllEntries);
        }
        catch (IOException e) {
             logger.log(Level.SEVERE, "Error parsing xRef table entries.", e);
        }
    }