Class ProofListIndexProxy<E>
- java.lang.Object
-
- com.exonum.binding.core.proxy.AbstractNativeProxy
-
- com.exonum.binding.core.storage.indices.ProofListIndexProxy<E>
-
- Type Parameters:
E
- the type of elements in this list
- All Implemented Interfaces:
ListIndex<E>
,StorageIndex
,Iterable<E>
public final class ProofListIndexProxy<E> extends AbstractNativeProxy implements ListIndex<E>
A proof list index proxy is a contiguous list of elements, capable of providing cryptographic proofs that it contains a certain element at a particular position. Non-null elements may be added to the end of the list only.The proof list is implemented as a hash tree (Merkle tree).
The "destructive" methods of the list, i.e., those that change its contents, are specified to throw
UnsupportedOperationException
if this list has been created with a read-only database view.All method arguments are non-null by default.
This class is not thread-safe and and its instances shall not be shared between threads.
When the view goes out of scope, this list is destroyed. Subsequent use of the closed list is prohibited and will result in
IllegalStateException
.- See Also:
View
-
-
Field Summary
-
Fields inherited from class com.exonum.binding.core.proxy.AbstractNativeProxy
nativeHandle
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(T e)
Adds a new element to the end of the list.void
addAll(Collection<? extends T> elements)
Adds all elements from the specified collection to this list.void
clear()
Clears the list.T
get(long index)
Returns the element at the given index.IndexAddress
getAddress()
Returns the index address: its unique identifier in the database.HashCode
getIndexHash()
Returns the index hash which represents the complete state of this list.T
getLast()
Returns the last element of the list.UncheckedListProof
getProof(long index)
Returns a proof of either existence or absence of an element at the specified index in this list.UncheckedListProof
getRangeProof(long from, long to)
Returns a proof of either existence or absence of some elements in the specified range in this list.boolean
isEmpty()
Returns true if the list is empty, false — otherwise.Iterator<T>
iterator()
Returns an iterator over the elements of the list.static <E> ProofListIndexProxy<E>
newInGroupUnsafe(String groupName, byte[] listId, View view, Serializer<E> serializer)
Creates a new list in a collection group with the given name.static <E> ProofListIndexProxy<E>
newInstance(String name, View view, Serializer<E> serializer)
Creates a new ProofListIndexProxy.static <E extends com.google.protobuf.MessageLite>
ProofListIndexProxy<E>newInstance(String name, View view, Class<E> elementType)
Creates a new ProofListIndexProxy storing protobuf messages.void
set(long index, T e)
Replaces the element at the given index of the list with the specified element.long
size()
Returns the number of elements in the list.Stream<T>
stream()
Returns a stream of elements in this list.String
toString()
-
Methods inherited from class com.exonum.binding.core.proxy.AbstractNativeProxy
getNativeHandle, isValidHandle
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface com.exonum.binding.core.storage.indices.ListIndex
add, addAll, clear, get, getLast, isEmpty, iterator, set, size, stream
-
Methods inherited from interface com.exonum.binding.core.storage.indices.StorageIndex
getAddress, getName
-
-
-
-
Method Detail
-
newInstance
public static <E extends com.google.protobuf.MessageLite> ProofListIndexProxy<E> newInstance(String name, View view, Class<E> elementType)
Creates a new ProofListIndexProxy storing protobuf messages.- Type Parameters:
E
- the type of elements in this list; must be a protobuf message that has a public static#parseFrom(byte[])
method- Parameters:
name
- a unique alphanumeric non-empty identifier of this list in the underlying storage: [a-zA-Z0-9_]view
- a database view. Must be valid. If a view is read-only, "destructive" operations are not permitted.elementType
- the class of elements-protobuf messages- Throws:
IllegalStateException
- if the view is not validIllegalArgumentException
- if the name is empty
-
newInstance
public static <E> ProofListIndexProxy<E> newInstance(String name, View view, Serializer<E> serializer)
Creates a new ProofListIndexProxy.- Type Parameters:
E
- the type of elements in this list- Parameters:
name
- a unique alphanumeric non-empty identifier of this list in the underlying storage: [a-zA-Z0-9_]view
- a database view. Must be valid. If a view is read-only, "destructive" operations are not permitted.serializer
- a serializer of elements- Throws:
IllegalStateException
- if the view is not validIllegalArgumentException
- if the name is empty- See Also:
StandardSerializers
-
newInGroupUnsafe
public static <E> ProofListIndexProxy<E> newInGroupUnsafe(String groupName, byte[] listId, View view, Serializer<E> serializer)
Creates a new list in a collection group with the given name.See a caveat on index identifiers.
- Type Parameters:
E
- the type of elements in this list- Parameters:
groupName
- a name of the collection grouplistId
- an identifier of this collection in the group, see the caveatsview
- a database viewserializer
- a serializer of list elements- Returns:
- a new list proxy
- Throws:
IllegalStateException
- if the view is not validIllegalArgumentException
- if the name or index id is empty- See Also:
StandardSerializers
-
getProof
public UncheckedListProof getProof(long index)
Returns a proof of either existence or absence of an element at the specified index in this list.- Parameters:
index
- the element index- Throws:
IndexOutOfBoundsException
- if the index is invalidIllegalStateException
- if this list is not valid
-
getRangeProof
public UncheckedListProof getRangeProof(long from, long to)
Returns a proof of either existence or absence of some elements in the specified range in this list. If some elements are present in the list, but some — are not (i.e., the requested range exceeds its size), a proof of absence is returned.- Parameters:
from
- the index of the first elementto
- the index after the last element- Throws:
IndexOutOfBoundsException
- if the range is not validIllegalStateException
- if this list is not valid
-
getIndexHash
public HashCode getIndexHash()
Returns the index hash which represents the complete state of this list. Any modifications to the stored entries affect the index hash.- Throws:
IllegalStateException
- if this list is not valid
-
add
public final void add(T e)
Description copied from interface:ListIndex
Adds a new element to the end of the list.
-
addAll
public void addAll(Collection<? extends T> elements)
Description copied from interface:ListIndex
Adds all elements from the specified collection to this list.If the collection contains an invalid element, this list is not modified.
-
set
public final void set(long index, T e)
Description copied from interface:ListIndex
Replaces the element at the given index of the list with the specified element.
-
get
public final T get(long index)
Description copied from interface:ListIndex
Returns the element at the given index.
-
getLast
public final T getLast()
Description copied from interface:ListIndex
Returns the last element of the list.
-
clear
public final void clear()
Description copied from interface:ListIndex
Clears the list.
-
isEmpty
public final boolean isEmpty()
Description copied from interface:ListIndex
Returns true if the list is empty, false — otherwise.
-
size
public final long size()
Description copied from interface:ListIndex
Returns the number of elements in the list.
-
iterator
public final Iterator<T> iterator()
Description copied from interface:ListIndex
Returns an iterator over the elements of the list.
-
stream
public Stream<T> stream()
Description copied from interface:ListIndex
Returns a stream of elements in this list. The returned stream is fail-fast and late-binding. The stream can be used as long as the source list is valid.
-
getAddress
public IndexAddress getAddress()
Description copied from interface:StorageIndex
Returns the index address: its unique identifier in the database. It consists of the name and, in case this index belongs to an index family, a family identifier.- Specified by:
getAddress
in interfaceStorageIndex
-
-