X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FCartesian.java;h=06295242e0f38f4b30c638c3c7ee978da41681ad;hb=731f00e92c8a8e205678900bc038a8c24cf9b2ae;hp=23e588412024a2e16ad261d4a1ce5020f9aab919;hpb=82f9b8d4a2fadb14cb004e5cc9f14944458f2e6c;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/Cartesian.java b/src/edu/berkeley/sbp/misc/Cartesian.java index 23e5884..0629524 100644 --- a/src/edu/berkeley/sbp/misc/Cartesian.java +++ b/src/edu/berkeley/sbp/misc/Cartesian.java @@ -1,3 +1,5 @@ +// Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp.misc; import java.io.*; import java.util.*; @@ -11,45 +13,51 @@ public class Cartesian { public static abstract class Input implements edu.berkeley.sbp.Input { - public abstract Token next() throws IOException; + public abstract Token _next() throws IOException; public abstract boolean isCR(); long then = 0; - private Cartesian.Location location = new Cartesian.Location(0, 1); + private Cartesian.Location location = new Cartesian.Location(); public edu.berkeley.sbp.Input.Location getLocation() { return location; } - public Token next(int numstates, int resets, int waits) throws IOException { - int line = location.getRow(); - int col = location.getCol(); - Token t = next(); + public Token next() throws IOException { + int line = location.getRow(); + int col = location.getCol(); + int scalar = location.getScalar(); + Token t = _next(); if (t==null) return null; - String s = " line "+line+", col " + col; - while(s.length() < 20) s += " "; - s += "[ambiguity level: " + (numstates-1) + "] [resets: " + resets + "] [waits: " + waits + "]"; - long now = System.currentTimeMillis(); - if (now-then > 10) { - then = now; - System.out.print(s + " \r"); - } if (isCR()) { line++; col = 1; } else { col++; } - location = new Cartesian.Location(col, line); + location.next = new Cartesian.Location(col, line, scalar+1); + location.next.prev = location; + location = location.next; return t; } + + public String showRegion(Input.Region region) { + return null; + } } /** an implementation of Location for a cartesian grid (row, col) */ public static class Location implements Input.Location, Comparable { protected final int row; protected final int col; + protected final int scalar; + Location next = null; + Location prev = null; + public Location next() { return next; } + public Location prev() { return prev; } public String toString() { return row+":"+col; } public int getCol() { return col; } public int getRow() { return row; } - public Location(int col, int row) { this.row = row; this.col = col; } + public int getScalar() { return scalar; } + public Location() { this(-1, 1, 0); } + public Location(int col, int row, int scalar) { this.row = row; this.col = col; this.scalar = scalar; } public int compareTo(Input.Location loc) throws ClassCastException { if (!(loc instanceof Cartesian.Location)) throw new ClassCastException(loc.getClass().getName()); Location c = (Location)loc; @@ -66,7 +74,10 @@ public class Cartesian { public static class Region implements Input.Region { public final Location start; public final Location end; + public Location getStart() { return start; } + public Location getEnd() { return end; } public String toString() { + if (start.row==end.row && start.col==end.col) return start+""; if (start.row==end.row) return start.row+":"+(start.col+"-"+end.col); return start+"-"+end; }