public void setValue( final int index, final Object value, final InternalReadAccessor extractor) { this.index = index; final ValueType vtype = extractor.getValueType(); isNull = extractor.isNullValue(null, value); if (vtype.isBoolean()) { this.type = BOOL; if (!isNull) { this.bvalue = extractor.getBooleanValue(null, value); this.setHashCode(this.bvalue ? 1231 : 1237); } else { this.setHashCode(0); } } else if (vtype.isIntegerNumber() || vtype.isChar()) { this.type = LONG; if (!isNull) { this.lvalue = extractor.getLongValue(null, value); this.setHashCode((int) (this.lvalue ^ (this.lvalue >>> 32))); } else { this.setHashCode(0); } } else if (vtype.isFloatNumber()) { this.type = DOUBLE; if (!isNull) { this.dvalue = extractor.getDoubleValue(null, value); final long temp = Double.doubleToLongBits(this.dvalue); this.setHashCode((int) (temp ^ (temp >>> 32))); } else { this.setHashCode(0); } } else { this.type = OBJECT; if (!isNull) { this.ovalue = extractor.getValue(null, value); this.setHashCode(this.ovalue != null ? this.ovalue.hashCode() : 0); } else { this.setHashCode(0); } } }