/*******************************************************************************
* Copyright (c) 2000, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.utils.debug.stabs;
import java.io.IOException;
import java.io.Reader;
public class TypeNumber {
int typeno;
int fileno;
public TypeNumber(int f, int t) {
fileno = f;
typeno = t;
}
public TypeNumber(Reader reader) {
parseTypeNumber(reader);
}
public int getTypeNo() {
return typeno;
}
public int getFileNo() {
return fileno;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TypeNumber) {
TypeNumber tn = (TypeNumber)obj;
return tn.typeno == typeno && tn.fileno == fileno;
}
return super.equals(obj);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return fileno*10 + typeno;
}
void parseTypeNumber(Reader reader) {
try {
int c = reader.read();
char ch = (char)c;
if (c == -1) {
return;
} else if (ch == '(') {
StringBuffer sb = new StringBuffer();
while ((c = reader.read()) != -1) {
ch = (char)c;
if (ch == ')') {
try {
typeno = Integer.parseInt(sb.toString());
} catch (NumberFormatException e) {
}
break;
} else if (ch == ',') {
try {
fileno = Integer.parseInt(sb.toString());
} catch (NumberFormatException e) {
}
sb.setLength(0);
} else if (Character.isDigit(ch)) {
sb.append(ch);
} else {
break;
}
}
} else if (Character.isDigit(ch)) {
StringBuffer sb = new StringBuffer();
sb.append(ch);
reader.mark(1);
while ((c = reader.read()) != -1) {
ch = (char)c;
if (Character.isDigit(ch)) {
sb.append(ch);
} else {
reader.reset();
break;
}
}
try {
typeno = Integer.parseInt(sb.toString());
} catch (NumberFormatException e) {
}
}
} catch (IOException e) {
}
}
}