Class ObjectIdOwnerMap<V extends ObjectIdOwnerMap.Entry>
- java.lang.Object
-
- org.eclipse.jgit.lib.ObjectIdOwnerMap<V>
-
- Type Parameters:
V- type of subclass of ObjectId that will be stored in the map.
- All Implemented Interfaces:
java.lang.Iterable<V>,ObjectIdSet
public class ObjectIdOwnerMap<V extends ObjectIdOwnerMap.Entry> extends java.lang.Object implements java.lang.Iterable<V>, ObjectIdSet
Fast, efficient map forObjectIdsubclasses in only one map.To use this map type, applications must have their entry value type extend from
ObjectIdOwnerMap.Entry, which itself extends from ObjectId.Object instances may only be stored in ONE ObjectIdOwnerMap. This restriction exists because the map stores internal map state within each object instance. If an instance is be placed in another ObjectIdOwnerMap it could corrupt one or both map's internal state.
If an object instance must be in more than one map, applications may use ObjectIdOwnerMap for one of the maps, and
ObjectIdSubclassMapfor the other map(s). It is encouraged to use ObjectIdOwnerMap for the map that is accessed most often, as this implementation runs faster than the more general ObjectIdSubclassMap implementation.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classObjectIdOwnerMap.EntryType of entry stored in theObjectIdOwnerMap.
-
Field Summary
Fields Modifier and Type Field Description (package private) intbitsNumber of low bits used to form the index intodirectory.(package private) V[][]directoryTop level directory of the segments.private intgrowThe map doubles in capacity whensizereaches this target.private static intINITIAL_DIRECTORYSize of the initial directory, will grow as necessary.private intmaskLow bit mask to index intodirectory,2^bits-1.private static intSEGMENT_BITSNumber of bits in a segment's index.private static intSEGMENT_SHIFT(package private) intsizeTotal number of objects in this map.
-
Constructor Summary
Constructors Constructor Description ObjectIdOwnerMap()Create an empty map.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <Q extends V>
voidadd(Q newValue)Store an object for future lookup.<Q extends V>
VaddIfAbsent(Q newValue)Store an object for future lookup.voidclear()Remove all entries from this map.private static intcomputeGrowAt(int bits)booleancontains(AnyObjectId toFind)Returns true if the objectId is contained within the collection.private static booleanequals(AnyObjectId firstObjectId, AnyObjectId secondObjectId)Vget(AnyObjectId toFind)Lookup an existing mapping.private voidgrow()booleanisEmpty()Whether this map is emptyjava.util.Iterator<V>iterator()private V[]newSegment()intsize()Get number of objects in this map.
-
-
-
Field Detail
-
INITIAL_DIRECTORY
private static final int INITIAL_DIRECTORY
Size of the initial directory, will grow as necessary.- See Also:
- Constant Field Values
-
SEGMENT_BITS
private static final int SEGMENT_BITS
Number of bits in a segment's index. Segments are 2^11 in size.- See Also:
- Constant Field Values
-
SEGMENT_SHIFT
private static final int SEGMENT_SHIFT
- See Also:
- Constant Field Values
-
directory
V extends ObjectIdOwnerMap.Entry[][] directory
Top level directory of the segments.The low
bitsof the SHA-1 are used to select the segment from this directory. Each segment is constant sized at 2^SEGMENT_BITS.
-
size
int size
Total number of objects in this map.
-
grow
private int grow
The map doubles in capacity whensizereaches this target.
-
bits
int bits
Number of low bits used to form the index intodirectory.
-
mask
private int mask
Low bit mask to index intodirectory,2^bits-1.
-
-
Method Detail
-
clear
public void clear()
Remove all entries from this map.
-
get
public V get(AnyObjectId toFind)
Lookup an existing mapping.- Parameters:
toFind- the object identifier to find.- Returns:
- the instance mapped to toFind, or null if no mapping exists.
-
contains
public boolean contains(AnyObjectId toFind)
Returns true if the objectId is contained within the collection.Returns true if this map contains the specified object.
- Specified by:
containsin interfaceObjectIdSet- Parameters:
toFind- the objectId to find- Returns:
- whether the collection contains the objectId.
-
add
public <Q extends V> void add(Q newValue)
Store an object for future lookup.An existing mapping for must not be in this map. Callers must first call
get(AnyObjectId)to verify there is no current mapping prior to adding a new mapping, or useaddIfAbsent(Entry).- Parameters:
newValue- the object to store.
-
addIfAbsent
public <Q extends V> V addIfAbsent(Q newValue)
Store an object for future lookup.Stores
newValue, but only if there is not already an object for the same object name. Callers can tell if the value is new by checking the return value with reference equality:V obj = ...; boolean wasNew = map.addIfAbsent(obj) == obj;
- Parameters:
newValue- the object to store.- Returns:
newValueif stored, or the prior value already stored and that would have been returned had the caller usedget(newValue)first.
-
size
public int size()
Get number of objects in this map.- Returns:
- number of objects in this map.
-
isEmpty
public boolean isEmpty()
Whether this map is empty- Returns:
- true if
size()is 0.
-
iterator
public java.util.Iterator<V> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<V extends ObjectIdOwnerMap.Entry>
-
grow
private void grow()
-
newSegment
private final V[] newSegment()
-
computeGrowAt
private static final int computeGrowAt(int bits)
-
equals
private static final boolean equals(AnyObjectId firstObjectId, AnyObjectId secondObjectId)
-
-