anchor.diff:    Result := CompareDValue(@FRawValue, @pvItem.FRawValue) = 0;
   end;
   
  +function TDValueItem.GetArrayItem(pvIndex: Integer): TDValueItem;
  +var
  +  lvObj:TObject;
  +begin
  +  if DataType <> vdtArray then
  +    raise EConvertError.CreateFmt(SConvertError, [DValueTypeName[DataType],
  +      DValueTypeName[vdtArray]]);
  +
  +  lvObj := DValueGetAsObject(GetDValueItem(@FRawValue, pvIndex));
  +  Result := TDValueItem(lvObj);
  +end;
  +
  +function TDValueItem.GetArraySize: Integer;
  +begin
  +  if FRawValue.ValueType <> vdtArray then Result := 0
  +  else Result := FRawValue.Value.ArrayLength;
  +end;
  +
   function TDValueItem.GetAsBoolean: Boolean;
   begin
     Result := DValueGetAsBoolean(@FRawValue);
  
positive.code: 
      function GetAsString: String;
      function GetDataType: TDValueDataType;
      procedure SetAsBoolean(const Value: Boolean);
      procedure SetAsFloat(const Value: Double);
      procedure SetAsInetger(const Value: Int64);
      procedure SetAsInterface(const Value: IInterface);
  
      procedure SetAsString(const Value: String);
    public
      destructor Destroy; override;
      function Equal(pvItem:TDValueItem): Boolean;
  
negative.code:     vdtOwnerObject, vdtReferObject:
        Result :=  TObject(ADValue.Value.AsPointer);
    else
      raise EConvertError.CreateFmt(SConvertError, [DValueTypeName[ADValue.ValueType],
        'Object']);
    end;
  end;
  