Class EnumBranch<A,E extends Enum<E>>
- Type Parameters:
A- the target type of objects to match againstE- the enum type to index the branches
- All Implemented Interfaces:
Pattern<A>,Serializable,Cloneable
Patterns of this class hold a map of keys of the enum type E to
subpatterns. For each target, the subpatterns are tried disjunctively, as
via Pattern.some(Iterable), in the natural order of their keys. For
each match, the key associated with the matching subpattern is temporarily
recorded, and may be retrieved with the getKey() method before the
next call to #match or #matchAgain.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classEnumBranch.Builder<A,E extends Enum<E>> Incremental builder. -
Field Summary
-
Constructor Summary
ConstructorsConstructorDescriptionEnumBranch(Class<E> cls) Deprecated, for removal: This API element is subject to removal in a future version.EnumBranch(EnumMap<E, ? extends Pattern<? super A>> branches) Creates a new instance with the given branches.EnumBranch(Map<E, ? extends Pattern<? super A>> branches) Creates a new instance with the given branches. -
Method Summary
Modifier and TypeMethodDescriptionbooleanChecks whether a variable is bound by this pattern.voidclear(boolean recursively) Disposes of all temporary internal state related to results and nondeterminism.voidcut(boolean recursively) Disposes of all temporary internal state related to nondeterminism.fork()Makes a copy of this pattern with independent internal state.getKey()Returns the key for the branch chosen for the most recent match.booleanChecks whether this pattern is deterministic.booleanAttempts to match this pattern against a given object.booleanAttempts to re-match this pattern against a previously matched object.booleanChecks whether a variable is preserved by this pattern unconditionally.booleanChecks whether a variable is preserved by this pattern, conditionally on success or failure.EnumBranch<A, E> Deprecated, for removal: This API element is subject to removal in a future version.UseEnumBranch.Builderinstead.Methods inherited from class eu.bandm.tools.paisley.AbstractPattern
clone, doclone
-
Constructor Details
-
EnumBranch
Creates a new instance with the given branches.The given map is copied for internal storage; later changes to the original map do not affect the resulting pattern.
- Parameters:
branches- the map of branches- Throws:
NullPointerException- ifbranchesis or contains null
-
EnumBranch
Creates a new instance with the given branches.The given map is copied for internal storage; later changes to the original map do not affect the resulting pattern.
- Parameters:
branches- the map of branches- Throws:
NullPointerException- ifbranchesis or contains nullIllegalArgumentException- ifbranchesis not anEnumMapand is empty
-
EnumBranch
Deprecated, for removal: This API element is subject to removal in a future version.UseEnumBranch.Builderinstead.Creates a new instance with no branches.- Parameters:
cls- the enum class to use for keys
-
-
Method Details
-
put
@Deprecated(forRemoval=true, since="1.0") public EnumBranch<A,E> put(E key, Pattern<? super A> pattern) Deprecated, for removal: This API element is subject to removal in a future version.UseEnumBranch.Builderinstead.Adds a new branch to this disjunction.- Parameters:
key- the key for the new branchpattern- the subpattern for the new branch- Returns:
this
-
getKey
Returns the key for the branch chosen for the most recent match.The most recent match has happened when a call to
matchormatchAgainhas last returnedtrue. The result is unspecified if neither has been called yet, orfalsehas been returned, orclearhas been called since.- Returns:
- the key for the branch chosen for the most recent match
-
match
Attempts to match this pattern against a given object.If the class of this pattern imposes a specific order on matches, the first one is chosen.
The
nulltarget is generally allowed.- Parameters:
target- the object to match against- Returns:
trueif the matching is successful,falseif it fails. WhichVariables are bound by a successful or failed match depends.- See Also:
-
matchAgain
public boolean matchAgain()Attempts to re-match this pattern against a previously matched object.If the class of this pattern imposes a specific order on matches, they are chosen in that order, beginning with the second one. The behaviour of this method is unspecified if the last matching attempt of this pattern has not been successful.
Patterns classes that do not override this method are deterministic. Pattern classes that overwrite this method to provide additional matches should also override
Pattern.isDeterministic().- Returns:
trueif the matching is successful,falseif it fails. WhichVariables are bound by a successful match depends. The default implementation always returnsfalse.- See Also:
-
cut
public void cut(boolean recursively) Disposes of all temporary internal state related to nondeterminism.The default implementation does nothing. Subclasses that override this method should also override
Pattern.clear(boolean)and ensure that it implies the effect ofcut(false).- Parameters:
recursively-trueif all subpatterns should traversed,falseotherwise.
-
clear
public void clear(boolean recursively) Disposes of all temporary internal state related to results and nondeterminism.The default implementation just invokes
cut(false). Subclasses that override this method should either invoke this overridden implementation, or ensure by other means that the effect ofcut(false)is implied.- Parameters:
recursively-trueif all subpatterns should be traversed,falseotherwise.
-
binds
Checks whether a variable is bound by this pattern.The default implementation returns
false.- Parameters:
v- a pattern variable- Returns:
trueif the variable is guaranteed to have a meaningful value when this pattern is open,falseotherwise.
-
preserves
Checks whether a variable is preserved by this pattern, conditionally on success or failure.The default implementation returns
false.- Parameters:
v- a pattern variablesuccess- specifies preservation on success or failure- Returns:
trueif the variable value is guaranteed to be unaffected by a matching attempt with this pattern that returns a value equal tosuccess.
-
preserves
Checks whether a variable is preserved by this pattern unconditionally.The default implementation returns
false.- Parameters:
v- a pattern variable- Returns:
trueif the variable value is guaranteed to be unaffected by any matching attempt with this pattern.
-
isDeterministic
public boolean isDeterministic()Checks whether this pattern is deterministic.The default implementation returns
false.- Returns:
trueif this pattern is guaranteed to match any object at most once,falseotherwise.- See Also:
-
fork
Makes a copy of this pattern with independent internal state.Subclasses must override this method if necessary to honour the following rules for all transitively reachable patterns:
- Subpatterns that are instances of
Variablemust be shared. This implies thatVariable.fork()must returnthis. - Fields that do not refer to subpatterns, but to matching
state (changed by invocations of
Pattern.match(A),Pattern.matchAgain(),Pattern.cut()orPattern.clear()) must be duplicated. If matching state changes are effected by modification of other objects, these must be duplicated. In summary, matching operations on this pattern and its copy must not interfere, with the exception of variable bindings. - Fields neither referring to subpatterns nor to matching state may be either shared or duplicated. The usage of such fields in a modifiable way (such that the distinction is relevant) is strongly deprecated.
- Patterns
whose fields need not be duplicated need not be duplicated themselves, but
may return
this.
- Subpatterns that are instances of
-
EnumBranch.Builderinstead.