001    package com.thaiopensource.relaxng.impl;
002    
003    import org.relaxng.datatype.ValidationContext;
004    
005    /**
006     * DerivType for a Pattern whose derivative wrt any data is always the same.
007     */
008    class SingleDataDerivType extends DataDerivType {
009      private PatternMemo memo;
010    
011      SingleDataDerivType() { }
012    
013      PatternMemo dataDeriv(ValidatorPatternBuilder builder, Pattern p, String str, ValidationContext vc) {
014        if (memo == null)
015          memo = super.dataDeriv(builder, p, str, vc);
016        return memo;
017      }
018    
019      DataDerivType copy() {
020        return new SingleDataDerivType();
021      }
022    
023      DataDerivType combine(DataDerivType ddt) {
024        return ddt;
025      }
026    }