package org.matheclipse.core.eval.util;
/**
* A level specification definition for levels in nested lists.
*
* Example: the nested list [x,[y]] has depth 3
*
*/
public class LevelSpec {
protected int fFromLevel;
protected int fToLevel;
protected int fFromDepth;
protected int fToDepth;
protected boolean fIncludeHeads;
protected int fCurrentLevel;
protected int fCurrentDepth;
public LevelSpec() {
this(0);
}
/**
* Define a level specification for all elements on level level.
*
* @param level
*/
public LevelSpec(final int level) {
this(level, true);
}
public LevelSpec(final int level, final boolean includeHeads) {
this(level, level, includeHeads);
}
public LevelSpec(final int fromLevel, final int toLevel) {
this(fromLevel, toLevel, true);
}
public LevelSpec(final int fromLevel, final int toLevel, final boolean includeHeads) {
this(fromLevel, toLevel, Integer.MIN_VALUE, -1, includeHeads);
}
/**
*
* Example value set for including all levels:
* fromLevel = 0;
* toLevel = Integer.MAX_VALUE;
* fromDepth = Integer.MIN_VALUE;
* toDepth = -1;
*
*
* @param fromLevel
* @param toLevel
* @param fromDepth
* @param toDepth
* @param includeHeads
*/
public LevelSpec(final int fromLevel, final int toLevel, final int fromDepth, final int toDepth, final boolean includeHeads) {
fFromLevel = fromLevel;
fToLevel = toLevel;
fCurrentLevel = 0;
fIncludeHeads = includeHeads;
fFromDepth = fromDepth;
fCurrentDepth = -1;
fToDepth = toDepth;
}
/**
* Get the current level
*
*/
public final int getCurrentLevel() {
return fCurrentLevel;
}
public final void resetCurrentLevel() {
fCurrentLevel = 0;
}
public final void setFromLevelAsCurrent() {
fCurrentLevel = fFromLevel;
}
public final void setToLevelAsCurrent() {
fCurrentLevel = fToLevel;
}
public final void decCurrentDepth() {
fCurrentDepth--;
}
/**
* Increments the current level
*
*/
public final void incCurrentLevel() {
fCurrentLevel++;
}
/**
* Decrements the current level
*
*/
public final void decCurrentLevel() {
fCurrentLevel--;
}
public boolean isInRange() {
return (fCurrentLevel >= fFromLevel) && (fCurrentLevel <= fToLevel) && (fCurrentDepth >= fFromDepth)
&& (fCurrentDepth <= fToDepth);
}
public boolean isInScope() {
return (fCurrentLevel <= fToLevel) && (fCurrentDepth <= fToDepth);
}
public final int getCurrentDepth() {
return fCurrentDepth;
}
public final void setCurrentDepth(final int currentDepth) {
fCurrentDepth = currentDepth;
}
public final void setCurrentLevel(final int currentLevel) {
fCurrentLevel = currentLevel;
}
/**
* @return the from level
*/
public int getFromLevel() {
return fFromLevel;
}
/**
* @return the to level
*/
public int getToLevel() {
return fToLevel;
}
/**
* @return the from depth
*/
public int getFromDepth() {
return fFromDepth;
}
/**
* @return the to depth
*/
public int getToDepth() {
return fToDepth;
}
/**
* @return if the level includes the heads of an expression
*/
public boolean isIncludeHeads() {
return fIncludeHeads;
}
}
Ads help maintain this website.