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);
        }
      }
    }