tikhomirov@64: /* tikhomirov@64: * Copyright (c) 2011 TMate Software Ltd tikhomirov@64: * tikhomirov@64: * This program is free software; you can redistribute it and/or modify tikhomirov@64: * it under the terms of the GNU General Public License as published by tikhomirov@64: * the Free Software Foundation; version 2 of the License. tikhomirov@64: * tikhomirov@64: * This program is distributed in the hope that it will be useful, tikhomirov@64: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@64: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@64: * GNU General Public License for more details. tikhomirov@64: * tikhomirov@64: * For information on how to redistribute this software under tikhomirov@64: * the terms of a license other than GNU General Public License tikhomirov@64: * contact TMate Software at support@svnkit.com tikhomirov@64: */ tikhomirov@64: package org.tmatesoft.hg.core; tikhomirov@64: tikhomirov@64: /** tikhomirov@64: * Identify repository files (not String nor io.File). Convenient for pattern matching. Memory-friendly. tikhomirov@64: * tikhomirov@64: * @author Artem Tikhomirov tikhomirov@64: * @author TMate Software Ltd. tikhomirov@64: */ tikhomirov@64: public final class Path implements CharSequence, Comparable/*Cloneable? - although clone for paths make no sense*/{ tikhomirov@64: // private String[] segments; tikhomirov@64: // private int flags; // dir, unparsed tikhomirov@64: private String path; tikhomirov@64: tikhomirov@64: /*package-local*/Path(String p) { tikhomirov@64: path = p; tikhomirov@64: } tikhomirov@64: tikhomirov@64: public int length() { tikhomirov@64: return path.length(); tikhomirov@64: } tikhomirov@64: tikhomirov@64: public char charAt(int index) { tikhomirov@64: return path.charAt(index); tikhomirov@64: } tikhomirov@64: tikhomirov@64: public CharSequence subSequence(int start, int end) { tikhomirov@64: // new Path if start-end matches boundaries of any subpath tikhomirov@64: return path.substring(start, end); tikhomirov@64: } tikhomirov@64: tikhomirov@64: @Override tikhomirov@64: public String toString() { tikhomirov@64: return path; // CharSequence demands toString() impl tikhomirov@64: } tikhomirov@64: tikhomirov@64: public int compareTo(Path o) { tikhomirov@64: return path.compareTo(o.path); tikhomirov@64: } tikhomirov@64: tikhomirov@64: @Override tikhomirov@64: public boolean equals(Object obj) { tikhomirov@64: if (obj != null && getClass() == obj.getClass()) { tikhomirov@64: return this == obj || path.equals(((Path) obj).path); tikhomirov@64: } tikhomirov@64: return false; tikhomirov@64: } tikhomirov@64: @Override tikhomirov@64: public int hashCode() { tikhomirov@64: return path.hashCode(); tikhomirov@64: } tikhomirov@64: tikhomirov@64: public static Path create(String path) { tikhomirov@64: if (path == null) { tikhomirov@64: throw new IllegalArgumentException(); tikhomirov@64: } tikhomirov@77: if (path.indexOf('\\') != -1) { tikhomirov@77: throw new IllegalArgumentException(); tikhomirov@77: } tikhomirov@64: Path rv = new Path(path); tikhomirov@64: return rv; tikhomirov@64: } tikhomirov@64: public interface Matcher { tikhomirov@64: public boolean accept(Path path); tikhomirov@64: } tikhomirov@64: }