views:

449

answers:

5

Hi dudes,

I have this array:

const / var
  _Data : array [0..4] of array [0..3] of Double =
    ((0,0,0,0),
     (0,0,1,1),
     (1,0,1,0),
     (1,1,0,0),
     (1,1,1,1));

I wanna pass it as param value for this procedure:

procedure NN.NetTraining(Data: TDoubleMatrix);

Where:

  TDoubleArray    = array of Double;
  TDoubleMatrix   = array of TDoubleArray;

Is There some manner to cast or convert this static array into dynamic array in Delphi (2009) ?

Thanks in advance.

+1  A: 

Dynamic arrays differ from normal arrays.

Dynamic arrays are pointers, while normal arrays are blocks of memory. With one dimensional arrays, you can use the address of the array. But with multi dimensional arrays this trick won't work.

In your case, I would use a file to initialize the array. So you can use dynamic arrays 100% of the time. Else you have to write your own conversion which kind of defeats the purpose of dymanic arrays.

Gamecat
+3  A: 
PhiS
I like ther create for dynamic arrays. Unfortunately there is no free.
Gamecat
@Gamecat: You don't need a free. Dynamic arrays are freed automatically when they go out of scope, or you can simply set them to nil. The Create() construct simply allows you to initialize the entire array in one shot.
Ken White
A: 

May be you should use open arrays instead?

Alexander
I'm pretty sure open arrays are only one-dimensional. Any further dimensions must be either static or dynamic. Can you post the code to show that it works?
Rob Kennedy
A: 

You can't cast but you can copy! Something like...

    procedure CopyDMatrix(var Source; LengthX, LengthY: integer; var Dest: TDoubleMatrix);
    const
      SizeOfDouble = SizeOf(Double);
    var
      n  : integer;
      ptr: pointer;
    begin
      SetLength(Dest, LengthX);
      Ptr := @Source;
      for n := 0 to LengthX - 1 do begin
        SetLength(Dest[n], LengthY);
        Move(ptr^, Dest[n][0] , SizeOfDouble * LengthY);
        inc(cardinal(ptr), SizeOfDouble * LengthY);
      end;
    end;

    //...  

    CopyDMatrix(Data, Length(Data), Length(Data[0]), DoubleMatrix);
GJ