anchor.diff:  procedure DValueSetAsBoolean(ADValue:PDRawValue; pvValue:Boolean);
   function DValueGetAsBoolean(ADValue: PDRawValue): Boolean;
   
  +function DValueIsEmpty(ADValue:PDRawValue): Boolean;
  +
   procedure RawValueCopyFrom(pvSource, pvDest: PDRawValue; pvIgnoreValueTypes:
       TDValueDataTypes = [vdtInterface, vdtObject, vdtPtr]);
   
  
positive.code:   Result := FValue.AsDateTime;
  end;
  
  procedure TDValue.SetAsDateTime(const Value: TDateTime);
  begin
    CheckSetNodeType(vntValue);
  
negative.code:   {$ENDIF}
  end;
  
  function DValueIsEmpty(ADValue:PDRawValue): Boolean;
  begin
    if (ADValue.ValueType in [vdtUnset, vdtNull]) then
    begin
      Result := True;
    end else if (ADValue.ValueType in [vdtString]) then
    begin
      Result := Length(ADValue.Value.AsString^) = 0;
    end else if (ADValue.ValueType in [vdtStringW]) then
    begin
      Result := Length(ADValue.Value.AsStringW^) = 0;
    {$IFDEF HAVE_ASNI_STRING}
    end else if (ADValue.ValueType in [vdtStringA]) then
    begin
      Result := Length(ADValue.Value.AsStringA^) = 0;
   {$ENDIF}
    end else if (ADValue.ValueType in [vdtDateTime]) then
    begin
      Result := ADValue.Value.AsDateTime = 0;
    end else if (ADValue.ValueType in [vdtObject, vdtPtr]) then
    begin
      Result := ADValue.Value.AsPointer = nil;
    end else if (ADValue.ValueType in [vdtInterface]) then
    begin
      Result := ADValue.Value.AsInterface^ = nil;
    end else
    begin
      Result := false;
    end;
  end;
  
  destructor TDValueObject.Destroy;
  begin
    ClearDValue(@FRawValue);
  