001 package com.thaiopensource.relaxng.impl;
002
003 import org.relaxng.datatype.ValidationContext;
004
005 class BlankDataDerivType extends DataDerivType {
006 private PatternMemo blankMemo;
007 private PatternMemo nonBlankMemo;
008
009 BlankDataDerivType() { }
010
011 PatternMemo dataDeriv(ValidatorPatternBuilder builder, Pattern p, String str, ValidationContext vc) {
012 if (DataDerivFunction.isBlank(str)) {
013 if (blankMemo == null)
014 blankMemo = super.dataDeriv(builder, p, str, vc);
015 return blankMemo;
016 }
017 else {
018 if (nonBlankMemo == null)
019 nonBlankMemo = super.dataDeriv(builder, p, str, vc);
020 return nonBlankMemo;
021 }
022 }
023
024 DataDerivType copy() {
025 return new BlankDataDerivType();
026 }
027
028 DataDerivType combine(DataDerivType ddt) {
029 if (ddt instanceof BlankDataDerivType || ddt instanceof SingleDataDerivType)
030 return this;
031 return InconsistentDataDerivType.getInstance();
032 }
033 }