/*
* xtc - The eXTensible Compiler
* Copyright (C) 2004-2007 Robert Grimm
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.tree;
import java.io.IOException;
/**
* The location in a source file.
*
* @author Robert Grimm
* @version $Revision: 1.12 $
*/
public class Location implements Comparable {
/** The file name. */
public final String file;
/** The line number. */
public final int line;
/** The column. */
public final int column;
/**
* Create a new location.
*
* @param file The file name.
* @param line The line number.
* @param column The column.
*/
public Location(String file, int line, int column) {
this.file = file;
this.line = line;
this.column = column;
}
public int hashCode() {
return file.hashCode() + line * 7 + column;
}
public boolean equals(Object o) {
if (this == o) return true;
if (! (o instanceof Location)) return false;
Location other = (Location)o;
if (! file.equals(other.file)) return false;
if (line != other.line) return false;
return column == other.column;
}
public int compareTo(Object o) {
Location other = (Location)o;
if (! file.equals(other.file)) {
return file.compareTo(other.file);
} else if (line != other.line) {
return (line < other.line ? -1 : 1);
} else {
return (column < other.column ? -1 : (column == other.column ? 0 : 1));
}
}
/**
* Write this location to the specified appenable.
*
* @param out The appendable.
* @throws IOException Signals an I/O error.
*/
public void write(Appendable out) throws IOException {
out.append(file);
out.append(':');
out.append(Integer.toString(line));
out.append(':');
out.append(Integer.toString(column));
}
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append(file);
buf.append(':');
buf.append(line);
buf.append(':');
buf.append(column);
return buf.toString();
}
}