public final class MemoryTraversalSideEffects extends Object implements TraversalSideEffects
TraversalSideEffects.Exceptions
Constructor and Description |
---|
MemoryTraversalSideEffects(TraversalSideEffects sideEffects) |
Modifier and Type | Method and Description |
---|---|
void |
add(String key,
Object value)
Add a value to the global side-effect value.
|
TraversalSideEffects |
clone()
Cloning is used to duplicate the sideEffects typically in distributed execution environments.
|
<V> V |
get(String key)
Get the sideEffect associated with the provided key.
|
static Set<MemoryComputeKey> |
getMemoryComputeKeys(Traversal.Admin<?,?> traversal) |
static ProgramPhase |
getMemorySideEffectsPhase(Traversal.Admin<?,?> traversal) |
<V> BinaryOperator<V> |
getReducer(String key)
Get the reducer associated with the side-effect key.
|
<S> Supplier<S> |
getSackInitialValue()
If sacks are enabled, get the initial value of the
Traverser sack. |
<S> BinaryOperator<S> |
getSackMerger()
If sacks are enabled and a merge function has been specified, then get it (else get
null ). |
<S> UnaryOperator<S> |
getSackSplitter()
If sacks are enabled and a split operator has been specified, then get it (else get
null ). |
TraversalSideEffects |
getSideEffects() |
<V> Supplier<V> |
getSupplier(String key)
Get the supplier associated with the side-effect key.
|
Set<String> |
keys()
The keys of the sideEffect which includes registered
Supplier keys. |
void |
mergeInto(TraversalSideEffects sideEffects)
Add the current
TraversalSideEffects values, suppliers, and reducers to the provided TraversalSideEffects . |
<V> void |
register(String key,
Supplier<V> initialValue,
BinaryOperator<V> reducer)
|
<V> void |
registerIfAbsent(String key,
Supplier<V> initialValue,
BinaryOperator<V> reducer)
|
void |
remove(String key)
Remove both the value and registered
Supplier associated with provided key. |
void |
set(String key,
Object value)
Set the specified key to the specified value.
|
static void |
setMemorySideEffects(Traversal.Admin<?,?> traversal,
Memory memory,
ProgramPhase phase) |
<S> void |
setSack(Supplier<S> initialValue,
UnaryOperator<S> splitOperator,
BinaryOperator<S> mergeOperator)
Set the initial value of each
Traverser "sack" along with the operators for splitting and merging sacks. |
void |
storeSideEffectsInMemory() |
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close, exists, forEach, isEmpty
public MemoryTraversalSideEffects(TraversalSideEffects sideEffects)
public TraversalSideEffects getSideEffects()
public void set(String key, Object value)
TraversalSideEffects
TraversalSideEffects.add(String, Object)
.
This method is only safe when there is only one representation of the side-effect and thus, not distributed across threads or machines.set
in interface TraversalSideEffects
key
- the key they key of the side-effectvalue
- the value the new value for the side-effectpublic <V> V get(String key) throws IllegalArgumentException
TraversalSideEffects
Supplier
for that key, generate the object, store the object in the sideEffects, and return it.get
in interface TraversalSideEffects
V
- the type of the value to retrievekey
- the key to get the value forIllegalArgumentException
- if the key does not reference an object or a registered supplier.public void remove(String key)
TraversalSideEffects
Supplier
associated with provided key.remove
in interface TraversalSideEffects
key
- the key of the value and registered supplier to removepublic Set<String> keys()
TraversalSideEffects
Supplier
keys. In essence, that which is possible
to TraversalSideEffects.get(String)
.keys
in interface TraversalSideEffects
public void add(String key, Object value)
TraversalSideEffects
TraversalSideEffects.set(String, Object)
should only be used in single-threaded systems or by a master traversal in a distributed environment.add
in interface TraversalSideEffects
key
- the key of the side-effect.value
- the partital value (to be merged) of the side-effect.public <V> void register(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)
TraversalSideEffects
TraversalSideEffects
providing a Supplier
and a BinaryOperator
.
If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.register
in interface TraversalSideEffects
V
- the type of the side-effect valuekey
- the key of the side-effect valueinitialValue
- the initial value supplierreducer
- the reducer to use for merging a distributed side-effect value into a single valuepublic <V> void registerIfAbsent(String key, Supplier<V> initialValue, BinaryOperator<V> reducer)
TraversalSideEffects
TraversalSideEffects
providing a Supplier
and a BinaryOperator
.
The registration will only overwrite a supplier or reducer if no supplier or reducer existed prior.
If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.registerIfAbsent
in interface TraversalSideEffects
V
- the type of the side-effect valuekey
- the key of the side-effect valueinitialValue
- the initial value supplierreducer
- the reducer to use for merging a distributed side-effect value into a single valuepublic <V> BinaryOperator<V> getReducer(String key)
TraversalSideEffects
Operator.assign
is provided.getReducer
in interface TraversalSideEffects
V
- the type of the side-effect valuekey
- the key of the side-effectpublic <V> Supplier<V> getSupplier(String key)
TraversalSideEffects
ConstantSupplier
is provided.getSupplier
in interface TraversalSideEffects
V
- the type of the side-effect valuekey
- the key of the side-effectpublic <S> void setSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator)
TraversalSideEffects
Traverser
"sack" along with the operators for splitting and merging sacks.
If no split operator is provided, then a direct memory copy is assumed (this is typically good for primitive types and strings).
If no merge operator is provided, then traversers with sacks will not be merged.setSack
in interface TraversalSideEffects
S
- the sack typeinitialValue
- the initial value supplier of the traverser sacksplitOperator
- the split operator for splitting traverser sacksmergeOperator
- the merge operator for merging traverser sackspublic <S> Supplier<S> getSackInitialValue()
TraversalSideEffects
Traverser
sack.
If its not enabled, then null
is returned.getSackInitialValue
in interface TraversalSideEffects
S
- the sack typepublic <S> UnaryOperator<S> getSackSplitter()
TraversalSideEffects
null
).
The split operator is used to split a sack when a bifurcation in a Traverser
happens.getSackSplitter
in interface TraversalSideEffects
S
- the sack typepublic <S> BinaryOperator<S> getSackMerger()
TraversalSideEffects
null
).
The merge function is used to merge two sacks when two Traverser
s converge.getSackMerger
in interface TraversalSideEffects
S
- the sack typepublic TraversalSideEffects clone()
TraversalSideEffects
clone
in interface TraversalSideEffects
clone
in class Object
public void mergeInto(TraversalSideEffects sideEffects)
TraversalSideEffects
TraversalSideEffects
values, suppliers, and reducers to the provided TraversalSideEffects
.
The implementation should (under the hood), use TraversalSideEffects.registerIfAbsent(String, Supplier, BinaryOperator)
so that
if the argument TraversalSideEffects
already has a registered supplier or binary operator, then don't overwrite it.mergeInto
in interface TraversalSideEffects
sideEffects
- the sideEffects to add this traversal's sideEffect data to.public void storeSideEffectsInMemory()
public static void setMemorySideEffects(Traversal.Admin<?,?> traversal, Memory memory, ProgramPhase phase)
public static ProgramPhase getMemorySideEffectsPhase(Traversal.Admin<?,?> traversal)
public static Set<MemoryComputeKey> getMemoryComputeKeys(Traversal.Admin<?,?> traversal)
Copyright © 2013–2022 Apache Software Foundation. All rights reserved.