package client.net.sf.saxon.ce.pattern;
import client.net.sf.saxon.ce.Configuration;
import client.net.sf.saxon.ce.om.Item;
import client.net.sf.saxon.ce.om.NodeInfo;
import client.net.sf.saxon.ce.type.ItemType;
import client.net.sf.saxon.ce.type.Type;
/**
* NodeTest is an interface that enables a test of whether a node has a particular
* name and type. An EmptySequenceTest matches no nodes or atomic values: it corresponds to the
* type empty-sequence().
*
* @author Michael H. Kay
*/
public final class EmptySequenceTest extends NodeTest {
private static EmptySequenceTest THE_INSTANCE = new EmptySequenceTest();
/**
* Get a NoNodeTest instance
*/
public static EmptySequenceTest getInstance() {
return THE_INSTANCE;
}
/**
* Private constructor
*/
private EmptySequenceTest() {}
public final int getPrimitiveType() {
return Type.EMPTY;
}
/**
* Get the primitive item type corresponding to this item type. For item(),
* this is Type.ITEM. For node(), it is Type.NODE. For specific node kinds,
* it is the value representing the node kind, for example Type.ELEMENT.
* For anyAtomicValue it is Type.ATOMIC_VALUE. For numeric it is Type.NUMBER.
* For other atomic types it is the primitive type as defined in XML Schema,
* except that INTEGER is considered to be a primitive type.
*/
public ItemType getPrimitiveItemType() {
return this;
}
/**
* Test whether a given item conforms to this type
* @param item The item to be tested
* @param allowURIPromotion
* @param config
* @return true if the item is an instance of this type; false otherwise
*/
public boolean matchesItem(Item item, boolean allowURIPromotion, Configuration config) {
return false;
}
/**
* Test whether this node test is satisfied by a given node
* @param nodeType The type of node to be matched
* @param fingerprint identifies the expanded name of the node to be matched
*/
public boolean matches(int nodeType, int fingerprint, int annotation) {
return false;
}
/**
* Test whether this node test is satisfied by a given node. This alternative
* method is used in the case of nodes where calculating the fingerprint is expensive,
* for example DOM or JDOM nodes.
* @param node the node to be matched
*/
public boolean matches(NodeInfo node) {
return false;
}
/**
* Determine the default priority of this node test when used on its own as a Pattern
*/
public final double getDefaultPriority() {
return -0.5;
}
/**
* Get a mask indicating which kinds of nodes this NodeTest can match. This is a combination
* of bits: 1<<Type.ELEMENT for element nodes, 1<<Type.TEXT for text nodes, and so on.
*/
public int getNodeKindMask() {
return 0;
}
public String toString() {
return "empty-sequence()";
}
/**
* Returns a hash code value for the object.
*/
public int hashCode() {
return "NoNodeTest".hashCode();
}
}
// 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.