Browse Source

Expose AnyObjectId compareTo(byte[]) and compareTo(int[])

Storage systems can use these implementations to compare a passed
AnyObjectId with a stored representation of an ObjectId in the
canonical network byte order format.  This can be useful to do a
binary search, or just linear scan, over an encoded storage file.

Change-Id: I8c72993c4f4c6e98d599ac2c9867453752f25fd2
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
stable-0.9
Shawn O. Pearce 15 years ago
parent
commit
677b9b17e2
  1. 26
      org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java

26
org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java

@ -142,7 +142,18 @@ public abstract class AnyObjectId implements Comparable {
return compareTo(((ObjectId) other)); return compareTo(((ObjectId) other));
} }
int compareTo(final byte[] bs, final int p) { /**
* Compare this ObjectId to a network-byte-order ObjectId.
*
* @param bs
* array containing the other ObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least
* 20 bytes, starting at this position are required.
* @return a negative integer, zero, or a positive integer as this object is
* less than, equal to, or greater than the specified object.
*/
public int compareTo(final byte[] bs, final int p) {
int cmp; int cmp;
cmp = NB.compareUInt32(w1, NB.decodeInt32(bs, p)); cmp = NB.compareUInt32(w1, NB.decodeInt32(bs, p));
@ -164,7 +175,18 @@ public abstract class AnyObjectId implements Comparable {
return NB.compareUInt32(w5, NB.decodeInt32(bs, p + 16)); return NB.compareUInt32(w5, NB.decodeInt32(bs, p + 16));
} }
int compareTo(final int[] bs, final int p) { /**
* Compare this ObjectId to a network-byte-order ObjectId.
*
* @param bs
* array containing the other ObjectId in network byte order.
* @param p
* position within {@code bs} to start the compare at. At least 5
* integers, starting at this position are required.
* @return a negative integer, zero, or a positive integer as this object is
* less than, equal to, or greater than the specified object.
*/
public int compareTo(final int[] bs, final int p) {
int cmp; int cmp;
cmp = NB.compareUInt32(w1, bs[p]); cmp = NB.compareUInt32(w1, bs[p]);

Loading…
Cancel
Save