All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.saxon.s9api.OccurrenceIndicator Maven / Gradle / Ivy

There is a newer version: 10.5
Show newest version
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2013 Saxonica Limited.
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package net.sf.saxon.s9api;

import net.sf.saxon.expr.StaticProperty;
import net.sf.saxon.value.Cardinality;

/**
 * Represents one of the possible occurrence indicators in a SequenceType. The four standard values are
 * ONE (no occurrence indicator), ZERO_OR_ONE (?), ZERO_OR_MORE (*), ONE_OR_MORE (+). In addition the
 * value ZERO is supported: this is used only in the type empty-sequence() which matches an empty sequence
 * and nothing else.
 */
public enum OccurrenceIndicator {
    ZERO, ZERO_OR_ONE, ZERO_OR_MORE, ONE, ONE_OR_MORE;

    protected int getCardinality() {
        switch(this) {
            case ZERO:
                return StaticProperty.EMPTY;
            case ZERO_OR_ONE:
                return StaticProperty.ALLOWS_ZERO_OR_ONE;
            case ZERO_OR_MORE:
                return StaticProperty.ALLOWS_ZERO_OR_MORE;
            case ONE:
                return StaticProperty.ALLOWS_ONE;
            case ONE_OR_MORE:
                return StaticProperty.ALLOWS_ONE_OR_MORE;
            default:
                return StaticProperty.EMPTY;
        }
    }

    protected static OccurrenceIndicator getOccurrenceIndicator(int cardinality) {
        switch (cardinality) {
            case StaticProperty.EMPTY:
                    return ZERO;
            case StaticProperty.ALLOWS_ZERO_OR_ONE:
                return ZERO_OR_ONE;
            case StaticProperty.ALLOWS_ZERO_OR_MORE:
                return ZERO_OR_MORE;
            case StaticProperty.ALLOWS_ONE:
                return ONE;
            case StaticProperty.ALLOWS_ONE_OR_MORE:
                return ONE_OR_MORE;
            default:
                return ZERO_OR_MORE;
        }
    }

    /**
     * Ask whether this occurrence indicator permits an empty sequence.
     * @return true if the occurrence indicator is one of {@link #ZERO}, {@link #ZERO_OR_ONE},
     * or {@link #ZERO_OR_MORE}
     * @since 9.2
     */

    public boolean allowsZero() {
        return Cardinality.allowsZero(getCardinality());
    }

    /**
     * Ask whether this occurrence indicator permits a sequence containing more than one item.
     * @return true if the occurrence indicator is one of {@link #ZERO_OR_MORE} or {@link #ONE_OR_MORE}
     * @since 9.2
     */

    public boolean allowsMany() {
        return Cardinality.allowsMany(getCardinality());
    }

    /**
     * Ask whether one occurrence indicator subsumes another. Specifically,
     * A.subsumes(B) is true if every sequence that satisfies the occurrence
     * indicator B also satisfies the occurrence indicator A.
     * @param other The other occurrence indicator
     * @return true if this occurrence indicator subsumes the other occurrence indicator
     * @since 9.1
     */

    public boolean subsumes(/*@NotNull*/ OccurrenceIndicator other) {
        return Cardinality.subsumes(getCardinality(), other.getCardinality());
    }

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy