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 * A marker for a point in an event loop turn where an event originated. 014 */ 015 public class 016 Anchor implements Comparable<Anchor>, Powerless, Record, Serializable { 017 static private final long serialVersionUID = 1L; 018 019 /** 020 * event loop turn in which the event originated 021 */ 022 public final Turn turn; 023 024 /** 025 * intra-{@linkplain #turn turn} event number 026 */ 027 public final long number; 028 029 /** 030 * Constructs an instance. 031 * @param turn {@link #turn} 032 * @param number {@link #number} 033 */ 034 public @deserializer 035 Anchor(@name("turn") final Turn turn, 036 @name("number") final long number) { 037 this.turn = turn; 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 && Anchor.class == o.getClass() && 046 number == ((Anchor)o).number && 047 (null!=turn?turn.equals(((Anchor)o).turn):null==((Anchor)o).turn); 048 } 049 050 public int 051 hashCode() { 052 return (null != turn ? turn.hashCode() : 0) + 053 (int)(number ^ (number >>> 32)) + 054 0x7C42A2C4; 055 } 056 057 // java.lang.Comparable interface 058 059 public int 060 compareTo(final Anchor o) { 061 final int major = turn.compareTo(o.turn); 062 if (0 != major) { return major; } 063 final long minor = number - o.number; 064 return minor < 0L ? -1 : minor == 0L ? 0 : 1; 065 } 066 }