Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2007 Mozilla Foundation
   *
   * Permission is hereby granted, free of charge, to any person obtaining a 
   * copy of this software and associated documentation files (the "Software"), 
   * to deal in the Software without restriction, including without limitation 
   * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
   * and/or sell copies of the Software, and to permit persons to whom the 
   * Software is furnished to do so, subject to the following conditions:
  *
  * The above copyright notice and this permission notice shall be included in 
  * all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  * DEALINGS IN THE SOFTWARE.
  */
 
 package nu.validator.source;

Immutable source location with zero-based indexes. Cannot point to a line break.

Author(s):
hsivonen
Version:
$Id$
 
 public final class Location implements Comparable<Location>, Cloneable {
     
     private final SourceCode owner;
     private final int line;
     private final int column;
    
    

Parameters:
line
column
 
     Location(final SourceCode ownerint lineint column) {
         this. = owner;
         if (line < 0) {
             line = 0;
             column = 0;
         } else if (column < 0) {
             line--;
             if (line < 0) {
                 line = 0;
                 column = 0;                
             } else {
                 column = owner.getLine(line).getBufferLength();
             }
         }
         this. = line;
         this. = column;
     }
 
     public int compareTo(Location o) {
         if (this. < o.line) {
             return -1;
         } else if (this. > o.line) {
             return 1;
         } else {
             if (this. < o.column) {
                 return -1;
             } else if (this. > o.column) {
                 return 1;
             } else {
                 return 0;
             }
         }
     }

    
 
     @Override
     public boolean equals(Object obj) {
         if (obj instanceof Location) {
             Location loc = (Locationobj;
             return this. == loc.line && this. == loc.column;
         } else {
             return false;
         }
     }

    
Returns the column.

Returns:
the column
 
     public int getColumn() {
         return ;
     }

    
Returns the line.

Returns:
the line
    public int getLine() {
        return ;
    }

    
    @Override
    public int hashCode() {
        return ( << 16) + ;
    }
    
    Location next() {
        return step(1);
    }
    
    Location prev() {
        return step(-1);
    }
    
    Location step(int offset) {
        int newLine = ;
        int newColumn = ;
        if (offset > 0) {
            for (int i = 0; i < offseti++) {
                if (newLine == .getNumberOfLines()) {
                    break;
                }
                newColumn++;
                Line sourceLine = .getLine(newLine);
                if (newColumn > sourceLine.getBufferLength()) {
                    newLine++;
                    newColumn = 0;
                }
            }
            return new Location(newLinenewColumn);
        } if (offset < 0) {
            offset = -offset;
            for (int i = 0; i < offseti++) {
                if (newLine == 0 && newColumn == 0) {
                    break;
                }
                newColumn--;
                if (newColumn == -1) {
                    newLine--;
                    newColumn = .getLine(newLine).getBufferLength();
                }
            }            
            return new Location(newLinenewColumn);
        } else {
            return this;
        }
    }

    
    @Override
    public String toString() {
        return  + ", " + ;
    }
New to GrepCode? Check out our FAQ X