import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
-import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
@Override
public boolean canReuseCurrent(final Current<QName, D> copy, final Current<QName, D> current,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
- return equalHistory(copy, current)
+ return equalHistory(copy.history(), current.history())
// FIXME: this should devolve to getArgument() equality
&& copy.getSchemaPath().equals(current.getSchemaPath());
}
- // TODO: can we speed this up?
- private static boolean equalHistory(final Current<?, ?> copy, final Current<?, ?> current) {
- return isAugmenting(copy) == isAugmenting(current)
- && isAddedByUses(copy) == isAddedByUses(current);
- }
-
- private static boolean isAugmenting(final Current<?, ?> stmt) {
- final CopyHistory history = stmt.history();
- return history.contains(CopyType.ADDED_BY_AUGMENTATION)
- || history.contains(CopyType.ADDED_BY_USES_AUGMENTATION);
- }
-
- private static boolean isAddedByUses(final Current<?, ?> stmt) {
- final CopyHistory history = stmt.history();
- return history.contains(CopyType.ADDED_BY_USES)
- || history.contains(CopyType.ADDED_BY_USES_AUGMENTATION);
+ private static boolean equalHistory(final CopyHistory copy, final CopyHistory current) {
+ return copy.isAugmenting() == current.isAugmenting() && copy.isAddedByUses() == current.isAddedByUses();
}
}
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
-import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
/**
}
public FlagsBuilder setHistory(final CopyHistory history) {
- int bits;
- if (history.contains(CopyType.ADDED_BY_USES_AUGMENTATION)) {
- bits = AUGMENTING | ADDED_BY_USES;
- } else {
- bits = 0;
- if (history.contains(CopyType.ADDED_BY_AUGMENTATION)) {
- bits |= AUGMENTING;
- }
- if (history.contains(CopyType.ADDED_BY_USES)) {
- bits |= ADDED_BY_USES;
- }
- }
-
- flags = flags & ~MASK_HISTORY | bits;
+ flags = flags & ~MASK_HISTORY
+ | (history.isAugmenting() ? AUGMENTING : 0) | (history.isAddedByUses() ? ADDED_BY_USES : 0);
return this;
}
import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
-import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
// initCopyType
final CopyHistory copyTypesFromOriginal = stmt.history();
- if (copyTypesFromOriginal.contains(CopyType.ADDED_BY_USES_AUGMENTATION)) {
- this.augmenting = true;
- this.addedByUses = true;
- } else {
- this.augmenting = copyTypesFromOriginal.contains(CopyType.ADDED_BY_AUGMENTATION);
- this.addedByUses = copyTypesFromOriginal.contains(CopyType.ADDED_BY_USES);
- }
+ this.augmenting = copyTypesFromOriginal.isAugmenting();
+ this.addedByUses = copyTypesFromOriginal.isAddedByUses();
nodeParameter = stmt.rawArgument() == null ? "" : stmt.rawArgument();
}
import java.util.Arrays;
import java.util.stream.Collectors;
import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.model.api.CopyableNode;
@Beta
-public final class CopyHistory implements Immutable {
+public final class CopyHistory implements Immutable, CopyableNode {
private static final CopyType[] VALUES = CopyType.values();
private static final CopyHistory[][] CACHE = new CopyHistory[VALUES.length][];
}
private static final CopyHistory ORIGINAL = cacheObject(CopyType.ORIGINAL, CopyType.ORIGINAL.bit());
+ private static final int IS_ADDED_BY_USES_BITS =
+ CopyType.ADDED_BY_USES_AUGMENTATION.bit() | CopyType.ADDED_BY_USES.bit();
+ private static final int IS_AUGMENTING_BITS =
+ CopyType.ADDED_BY_USES_AUGMENTATION.bit() | CopyType.ADDED_BY_AUGMENTATION.bit();
private final short operations;
private final short lastOperation;
return ret;
}
- public boolean contains(final CopyType type) {
- return (operations & type.bit()) != 0;
- }
-
public CopyType getLastOperation() {
return VALUES[lastOperation];
}
+ @Override
+ @Deprecated
+ public boolean isAugmenting() {
+ return (operations & IS_AUGMENTING_BITS) != 0;
+ }
+
+ @Override
+ @Deprecated
+ public boolean isAddedByUses() {
+ return (operations & IS_ADDED_BY_USES_BITS) != 0;
+ }
+
+ @VisibleForTesting
+ boolean contains(final CopyType type) {
+ return (operations & type.bit()) != 0;
+ }
+
@VisibleForTesting
CopyHistory append(final CopyType typeOfCopy, final CopyHistory toAppend) {
final int newOperations = operations | toAppend.operations | typeOfCopy.bit();