RecordLocationImpl xref

View Javadoc

    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 }