/* zweic -- a compiler for zwei
*
* Stephane Micheloud & LAMP
*
* $Id$
*/
package zweic;
/** This class provides methods for encoding a location in
* a source file (line/column) into a single integer.
*/
object Position {
/** number of bits reserved for the column.
*/
val columnBits = 12;
val columnMask = (1 << columnBits) - 1;
/** undefined position
*/
val UNDEFINED = 0;
/** first position in a source file
*/
val FIRST = (1 << columnBits) | 1;
/** encode a line and column number into a single int
*/
def encode(line: Int, col: Int): Int =
(line << columnBits) | (col & columnMask);
/** get the line number out of an encoded position
*/
def line(pos: Int): Int =
pos >>> columnBits;
/** return the column number of an encoded position
*/
def column(pos: Int): Int =
pos & columnMask;
def toString(pos: Int) = line(pos).toString() + ":" + column(pos);
}