On 18.10.2011 21:30, Jonas Maebe wrote:

On 18 Oct 2011, at 20:03, Andrew Pennebaker wrote:

In particular, if anyone knows a way to implement a general concatenation
function Concat(Arr1, Arr2), let me know.

I'm under the impression that you are trying to program in a statically typed 
language the same way as you'd use a dynamically typed language. Even with 
generic functions (which, as mentioned before, are not yet supported by FPC) 
you'd have to explicitly instantiate such a function for every type you'd want 
to do this for.

At least in theory it should work with generic functions (and using the Delphi compatible generic syntax):

=== source begin ===

type
  TGenArray<T> = array of T; // this should work in trunk already

function Concat<T>(Arr1, Arr2: TGenArray<T>): TGenArray<T>;
begin
  SetLength(Result, Length(aArray1) + Length(aArray2));
  if Length(aArray1) > 0 then
    Move(aArray1[0], Result[0], Length(aArray1) * SizeOf(T));
  if Length(aArray2) > 0 then
    Move(aArray2[0], Result[Length(aArray1)], Length(aArray2) * SizeOf(T));
end;

var
  arr1, arr2, res: array of Integer;
begin
  // init arr1
  ...
  // init arr2
  ...
  res := Concat<Integer>(arr1, arr2);
  ...
end.

=== source end ===

(tested using a non generic integer version)

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to