/* * xtc - The eXTensible Compiler * Copyright (C) 2004, 2006 Robert Grimm * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package xtc.parser; import xtc.tree.Node; /** * A character range for a character classs. * * @see CharClass * * @author Robert Grimm * @version $Revision: 1.10 $ */ public class CharRange extends Node implements Comparable<CharRange> { /** The first character. */ public final char first; /** The last character. */ public final char last; /** * Create a new single-character range with the specified character. * * @param c The character. */ public CharRange(final char c) { this(c, c); } /** * Create a new character range with the specified characters. * * @param first The first character. * @param last The last character. */ public CharRange(final char first, final char last) { if (first > last) { this.first = last; this.last = first; } else { this.first = first; this.last = last; } } /** * Determine the number of characters covered by this character * range. * * @return The number of characters for this character range. */ public int count() { return (last - first + 1); } /** * Determine whether this character range contains the specified * character. * * @param c The character. * @return <code>true</code> if this character range contains * the specified character. */ public boolean contains(final char c) { return ((first <= c) && (c <= last)); } public int hashCode() { if (first == last) { return first; } else { return first + last; } } public boolean equals(final Object o) { if (this == o) return true; if (! (o instanceof CharRange)) return false; CharRange other = (CharRange)o; if (first != other.first) return false; return (last == other.last); } public int compareTo(final CharRange other) { return this.first - other.first; } }