001    // License: GPL. Copyright 2007 by Gabriel Ebner
002    package org.openstreetmap.josm.data.osm;
003    
004    /**
005     * A segment consisting of 2 consecutive nodes out of a way.
006     */
007    public final class WaySegment {
008        /**
009         * The way.
010         */
011        public Way way;
012    
013        /**
014         * The index of one of the 2 nodes in the way.  The other node has the
015         * index <code>lowerIndex + 1</code>.
016         */
017        public int lowerIndex;
018    
019        public WaySegment(Way w, int i) {
020            way = w;
021            lowerIndex = i;
022        }
023    
024        public Node getFirstNode(){
025            return way.getNode(lowerIndex);
026        }
027    
028        public Node getSecondNode(){
029            return way.getNode(lowerIndex + 1);
030        }
031    
032        /**
033         * returns this way segment as complete way.
034         * @return
035         */
036        public Way toWay() {
037            Way w = new Way();
038            w.addNode(getFirstNode());
039            w.addNode(getSecondNode());
040            return w;
041        }
042    
043        @Override public boolean equals(Object o) {
044            return o != null && o instanceof WaySegment
045                && ((WaySegment) o).way == way
046                && ((WaySegment) o).lowerIndex == lowerIndex;
047        }
048    
049        @Override public int hashCode() {
050            return way.hashCode() ^ lowerIndex;
051        }
052    }