public class RefMap extends java.util.AbstractMap<java.lang.String,Ref>
RefDatabase
namespace.
Although not declared as a SortedMap
, iterators from this
map's projections always return references in
RefComparator
ordering. The map's internal
representation is a sorted array of Ref
objects,
which means lookup and replacement is O(log N), while insertion and removal
can be as expensive as O(N + log N) while the list expands or contracts.
Since this is not a general map implementation, all entries must be keyed by
the reference name.
This class is really intended as a helper for RefDatabase
, which
needs to perform a merge-join of three sorted
RefList
s in order to present the unified
namespace of the packed-refs file, the loose refs/ directory tree, and the
resolved form of any symbolic references.
Modifier and Type | Class and Description |
---|---|
private class |
RefMap.Ent |
private class |
RefMap.SetIterator |
Modifier and Type | Field and Description |
---|---|
private java.util.Set<java.util.Map.Entry<java.lang.String,Ref>> |
entrySet |
(package private) RefList<Ref> |
loose
Immutable collection of the loose references at construction time.
|
(package private) RefList<Ref> |
packed
Immutable collection of the packed references at construction time.
|
(package private) java.lang.String |
prefix
Prefix denoting the reference subspace this map contains.
|
(package private) RefList<Ref> |
resolved
Immutable collection of resolved symbolic references.
|
(package private) int |
size |
(package private) boolean |
sizeIsValid |
Constructor and Description |
---|
RefMap()
Construct an empty map with a small initial capacity.
|
RefMap(java.lang.String prefix,
RefList<? extends Ref> packed,
RefList<? extends Ref> loose,
RefList<? extends Ref> resolved)
Construct a map to merge 3 collections together.
|
Modifier and Type | Method and Description |
---|---|
boolean |
containsKey(java.lang.Object name) |
java.util.Set<java.util.Map.Entry<java.lang.String,Ref>> |
entrySet() |
Ref |
get(java.lang.Object key) |
boolean |
isEmpty() |
Ref |
put(java.lang.String keyName,
Ref value) |
Ref |
remove(java.lang.Object key) |
(package private) java.lang.String |
toMapKey(Ref ref) |
static java.util.stream.Collector<Ref,?,RefMap> |
toRefMap(java.util.function.BinaryOperator<Ref> mergeFunction)
Create a
Collector for Ref . |
private java.lang.String |
toRefName(java.lang.String name) |
java.lang.String |
toString() |
clear, clone, containsValue, equals, hashCode, keySet, putAll, size, values
final java.lang.String prefix
All reference names in this map must start with this prefix. If the prefix is not the empty string, it must end with a '/'.
RefList<Ref> loose
If an entry appears here and in packed
, this entry must take
precedence, as its more current. Symbolic references in this collection
are typically unresolved, so they only tell us who their target is, but
not the current value of the target.
RefList<Ref> resolved
This collection contains only the symbolic references we were able to
resolve at map construction time. Other loose references must be read
from loose
. Every entry in this list must be matched by an entry
in loose
, otherwise it might be omitted by the map.
int size
boolean sizeIsValid
private java.util.Set<java.util.Map.Entry<java.lang.String,Ref>> entrySet
public RefMap()
public RefMap(java.lang.String prefix, RefList<? extends Ref> packed, RefList<? extends Ref> loose, RefList<? extends Ref> resolved)
prefix
- prefix used to slice the lists down. Only references whose
names start with this prefix will appear to reside in the map.
Must not be null, use ""
(the empty string) to select
all list items.packed
- items from the packed reference list, this is the last list
searched.loose
- items from the loose reference list, this list overrides
packed
if a name appears in both.resolved
- resolved symbolic references. This list overrides the prior
list loose
, if an item appears in both. Items in this
list must also appear in loose
.public boolean containsKey(java.lang.Object name)
public Ref get(java.lang.Object key)
public Ref remove(java.lang.Object key)
public boolean isEmpty()
public java.util.Set<java.util.Map.Entry<java.lang.String,Ref>> entrySet()
public java.lang.String toString()
toString
in class java.util.AbstractMap<java.lang.String,Ref>
public static java.util.stream.Collector<Ref,?,RefMap> toRefMap(java.util.function.BinaryOperator<Ref> mergeFunction)
Collector
for Ref
.mergeFunction
- Collector
for Ref
private java.lang.String toRefName(java.lang.String name)
java.lang.String toMapKey(Ref ref)