001    package com.thaiopensource.relaxng.impl;
002    
003    import org.relaxng.datatype.Datatype;
004    
005    class DatatypeValue {
006      private final Object value;
007      private final Datatype dt;
008    
009      DatatypeValue(Object value, Datatype dt) {
010        this.value = value;
011        this.dt = dt;
012      }
013    
014      public int hashCode() {
015        return dt.hashCode() ^ dt.valueHashCode(value);
016      }
017    
018      public boolean equals(Object obj) {
019        if (!(obj instanceof DatatypeValue))
020          return false;
021        DatatypeValue other = (DatatypeValue)obj;
022        if (other.dt != dt)
023          return false;
024        return dt.sameValue(value, other.value);
025      }
026    }