001    // Copyright 2008 Waterken Inc. under the terms of the MIT X license
002    // found at http://www.opensource.org/licenses/mit-license.html
003    package org.ref_send.log;
004    
005    import java.io.Serializable;
006    
007    import org.joe_e.Powerless;
008    import org.ref_send.Record;
009    import org.ref_send.deserializer;
010    import org.ref_send.name;
011    
012    /**
013     * An event loop turn identifier.
014     */
015    public final class
016    Turn implements Comparable<Turn>, Powerless, Record, Serializable {
017        static private final long serialVersionUID = 1L;
018    
019        /**
020         * URI for the event loop
021         */
022        public final String loop;
023        
024        /**
025         * local turn number
026         */
027        public final long number;
028        
029        /**
030         * Constructs an instance.
031         * @param loop      {@link #loop}
032         * @param number    {@link #number}
033         */
034        public @deserializer
035        Turn(@name("loop") final String loop,
036             @name("number") final long number) {
037            this.loop = loop;
038            this.number = number;
039        }
040        
041        // org.joe_e.Selfless interface
042        
043        public boolean
044        equals(final Object o) {
045            return null != o && Turn.class == o.getClass() &&
046                number == ((Turn)o).number &&
047                (null!=loop ? loop.equals(((Turn)o).loop) : null == ((Turn)o).loop);
048        }
049        
050        public int
051        hashCode() {
052            return (null != loop ? loop.hashCode() : 0) +
053                   (int)(number ^ (number >>> 32)) +
054                   0x10097C42;
055        }
056        
057        // java.lang.Comparable interface
058    
059        public int
060        compareTo(final Turn o) {
061            if (!(null != loop ? loop.equals(o.loop) : null == o.loop)) {
062                throw new ClassCastException();
063            }
064            final long d = number - o.number;
065            return d < 0L ? -1 : d == 0L ? 0 : 1;
066        }
067    }