/*
* @(#)$Id: FloatingNumberType.java,v 1.14 2002/10/08 22:01:27 kk122374 Exp $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package com.sun.msv.datatype.xsd;
import org.relaxng.datatype.ValidationContext;
/** base class of FloatType and DoubleType
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
abstract class FloatingNumberType extends BuiltinAtomicType implements Comparator {
protected FloatingNumberType( String typeName ) { super(typeName); }
final protected boolean checkFormat( String lexicalValue, ValidationContext context ) {
// FloatType and DoubleType checks format by trying to convert it to value object
return _createValue(lexicalValue,context)!=null;
}
protected static boolean isDigitOrPeriodOrSign( char ch ) {
if( '0'<=ch && ch<='9' ) return true;
if( ch=='+' || ch=='-' || ch=='.' ) return true;
return false;
}
public final int compare( Object lhs, Object rhs ) {
// float and double type has total order.
// implementation of Float.compareTo/Double.compareTo is
// consistent with the spec
int r = ((Comparable)lhs).compareTo(rhs);
if(r<0) return -1;
if(r>0) return +1;
return 0;
}
public final int isFacetApplicable( String facetName ) {
// TODO : should we allow scale facet, or not?
if( facetName.equals(FACET_PATTERN)
|| facetName.equals(FACET_ENUMERATION)
|| facetName.equals(FACET_WHITESPACE)
|| facetName.equals(FACET_MAXINCLUSIVE)
|| facetName.equals(FACET_MININCLUSIVE)
|| facetName.equals(FACET_MAXEXCLUSIVE)
|| facetName.equals(FACET_MINEXCLUSIVE) )
return APPLICABLE;
else
return NOT_ALLOWED;
}
}