Newer
Older
zweic / sources / zweic / Position.scala
@glproj03 glproj03 on 20 Nov 2005 938 bytes *** empty log message ***
/*  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);
}