1 /*** 2 * 3 * Copyright 2004 Hiram Chirino 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 **/ 18 package org.codehaus.activemq.journal.impl; 19 20 import org.codehaus.activemq.journal.RecordLocation; 21 22 /*** 23 * Defines a where a record can be located in the Journal. 24 * 25 * @version $Revision: 1.2 $ 26 */ 27 public class RecordLocationImpl implements RecordLocation { 28 29 final private byte fileMangerId; 30 final private byte segmentIndex; 31 final private int segmentOffset; 32 final private long sequenceId; 33 34 public RecordLocationImpl(final byte fileMangerId, final byte segmentIndex, 35 final int fileOffset, long sequenceId) { 36 super(); 37 this.fileMangerId = fileMangerId; 38 this.segmentIndex = segmentIndex; 39 this.segmentOffset = fileOffset; 40 this.sequenceId = sequenceId; 41 } 42 43 /*** 44 * @param b 45 * @param segmentIndex2 46 * @param offset 47 */ 48 public RecordLocationImpl(final byte fileMangerId, final byte segmentIndex, final int fileOffset) { 49 super(); 50 this.fileMangerId = fileMangerId; 51 this.segmentIndex = segmentIndex; 52 this.segmentOffset = fileOffset; 53 this.sequenceId = -1; 54 } 55 56 /*** 57 * @see java.lang.Comparable#compareTo(java.lang.Object) 58 */ 59 public int compareTo(Object o) { 60 return (int)(sequenceId - ((RecordLocationImpl)o).sequenceId); 61 } 62 63 /*** 64 * @see java.lang.Object#hashCode() 65 */ 66 public int hashCode() { 67 return segmentOffset^segmentIndex^(fileMangerId<<8)^((int)sequenceId); 68 } 69 70 /*** 71 * @see java.lang.Object#equals(java.lang.Object) 72 */ 73 public boolean equals(Object o) { 74 if( o==null || o.getClass()!=RecordLocationImpl.class ) 75 return false; 76 RecordLocationImpl rl = (RecordLocationImpl)o; 77 return rl.sequenceId == this.sequenceId && rl.segmentOffset == this.segmentOffset && 78 rl.segmentIndex==this.segmentIndex && rl.fileMangerId == this.fileMangerId; 79 } 80 81 /*** 82 * @see java.lang.Object#toString() 83 */ 84 public String toString() { 85 return ""+fileMangerId+":"+segmentIndex+":"+segmentOffset+":"+sequenceId; 86 } 87 88 /*** 89 * @return Returns the fileMangerId. 90 */ 91 public byte getFileMangerId() { 92 return fileMangerId; 93 } 94 /*** 95 * @return Returns the fileId. 96 */ 97 public byte getSegmentIndex() { 98 return segmentIndex; 99 } 100 /*** 101 * @return Returns the fileOffset. 102 */ 103 public int getSegmentOffset() { 104 return segmentOffset; 105 } 106 107 /*** 108 * @return Returns the sequenceId. 109 */ 110 public long getSequenceId() { 111 return sequenceId; 112 } 113 114 public RecordLocationImpl setSegmentIndexAndOffset(byte segmentIndex, int offset) { 115 return new RecordLocationImpl(this.fileMangerId, segmentIndex, offset); 116 } 117 118 public RecordLocationImpl setSequence(long seq) { 119 return new RecordLocationImpl(this.fileMangerId, this.segmentIndex, this.segmentOffset, seq); 120 } 121 }