Browse Source

Merge "Add internal API for note iteration"

stable-0.10
Chris Aniszczyk 14 years ago committed by Code Review
parent
commit
9f2bde653f
  1. 57
      org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java
  2. 24
      org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java
  3. 4
      org.eclipse.jgit/src/org/eclipse/jgit/notes/NoteBucket.java

57
org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java

@ -46,9 +46,12 @@ package org.eclipse.jgit.notes;
import static org.eclipse.jgit.lib.FileMode.TREE;
import java.io.IOException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.eclipse.jgit.lib.AbbreviatedObjectId;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.MutableObjectId;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
@ -107,6 +110,54 @@ class FanoutBucket extends InMemoryNoteBucket {
return b != null ? b.get(objId, or) : null;
}
@Override
Iterator<Note> iterator(AnyObjectId objId, final ObjectReader reader)
throws IOException {
final MutableObjectId id = new MutableObjectId();
id.fromObjectId(objId);
return new Iterator<Note>() {
private int cell;
private Iterator<Note> itr;
public boolean hasNext() {
if (itr != null && itr.hasNext())
return true;
for (; cell < table.length; cell++) {
NoteBucket b = table[cell];
if (b == null)
continue;
try {
id.setByte(prefixLen >> 1, cell);
itr = b.iterator(id, reader);
} catch (IOException err) {
throw new RuntimeException(err);
}
if (itr.hasNext()) {
cell++;
return true;
}
}
return false;
}
public Note next() {
if (hasNext())
return itr.next();
else
throw new NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
@Override
InMemoryNoteBucket set(AnyObjectId noteOn, AnyObjectId noteData,
ObjectReader or) throws IOException {
@ -193,6 +244,12 @@ class FanoutBucket extends InMemoryNoteBucket {
return load(objId, or).get(objId, or);
}
@Override
Iterator<Note> iterator(AnyObjectId objId, ObjectReader reader)
throws IOException {
return load(objId, reader).iterator(objId, reader);
}
@Override
InMemoryNoteBucket set(AnyObjectId noteOn, AnyObjectId noteData,
ObjectReader or) throws IOException {

24
org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java

@ -47,6 +47,8 @@ import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH;
import static org.eclipse.jgit.lib.FileMode.REGULAR_FILE;
import java.io.IOException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId;
@ -103,6 +105,28 @@ class LeafBucket extends InMemoryNoteBucket {
return 0 <= idx ? notes[idx].getData() : null;
}
@Override
Iterator<Note> iterator(AnyObjectId objId, ObjectReader reader) {
return new Iterator<Note>() {
private int idx;
public boolean hasNext() {
return idx < cnt;
}
public Note next() {
if (hasNext())
return notes[idx++];
else
throw new NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
InMemoryNoteBucket set(AnyObjectId noteOn, AnyObjectId noteData,
ObjectReader or) throws IOException {
int p = search(noteOn);

4
org.eclipse.jgit/src/org/eclipse/jgit/notes/NoteBucket.java

@ -44,6 +44,7 @@
package org.eclipse.jgit.notes;
import java.io.IOException;
import java.util.Iterator;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId;
@ -60,6 +61,9 @@ abstract class NoteBucket {
abstract ObjectId get(AnyObjectId objId, ObjectReader reader)
throws IOException;
abstract Iterator<Note> iterator(AnyObjectId objId, ObjectReader reader)
throws IOException;
abstract InMemoryNoteBucket set(AnyObjectId noteOn, AnyObjectId noteData,
ObjectReader reader) throws IOException;

Loading…
Cancel
Save